Python Numpy vectorize错误地将输出转换为整数
我正在努力处理以下代码:Python Numpy vectorize错误地将输出转换为整数,python,numpy,vectorization,Python,Numpy,Vectorization,我正在努力处理以下代码: import numpy as np e = np.linspace(0, 4, 10) def g(x): if x > 1: return x else: return 0 vg = np.vectorize(g) print(vg(e)) 结果如下所示: [0 0 0 1 1 2 2 3 3 4] 我还检查了数据类型。似乎矢量化函数正在将类型从float64转换为int64 矢量化的文档说明
import numpy as np
e = np.linspace(0, 4, 10)
def g(x):
if x > 1:
return x
else:
return 0
vg = np.vectorize(g)
print(vg(e))
结果如下所示:
[0 0 0 1 1 2 2 3 3 4]
我还检查了数据类型。似乎矢量化函数正在将类型从float64转换为int64 矢量化的文档说明: 通过调用 具有输入的第一个元素的函数。这是可以避免的 通过指定
otypes
参数
输入的第一个元素是0.0
,它返回整数0
,因此numpy
知道,您需要整数数据类型。正如您所发现的,如果您将其更改为0.0
,这样您就不会更改返回类型,它将正常工作。或者,您可以指定o类型
:
>>> vg = np.vectorize(g)
>>> vg(e)
array([0, 0, 0, 1, 1, 2, 2, 3, 3, 4])
>>> vg = np.vectorize(g, otypes=[np.float64])
>>> vg(e)
array([ 0. , 0. , 0. , 1.33333333, 1.77777778,
2.22222222, 2.66666667, 3.11111111, 3.55555556, 4. ])
@阿弥陀佛
Python也将输入变量视为int,因此,如果要使所有变量都保持浮点64,则需要将所有必要的“数字”指定为浮点。当我将0更改为0.0时,问题得到解决,我得到了浮点64。vectorize将输出更改为int64函数是否正确?