我正在努力使用以下代码:
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]
我还检查了dtype。似乎vectorize函数正在从float64!
将类型转换为int64答案 0 :(得分:5)
vectorized
的文档说明:
otypes
输出的数据类型由调用确定 具有输入的第一个元素的函数。这可以避免 通过指定0.0
参数。
输入的第一个元素是0
,它返回整数numpy
,因此只要0.0
知道,你需要一个整数dtype。正如您所发现的,如果您将其更改为otypes
,那么您不会更改返回类型,那么它就会表现出来。或者,您可以指定>>> 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. ])
:
{{1}}
答案 1 :(得分:0)
@amiragha
Python也将你的输入变量视为int,所以如果你想保留所有浮动64,你需要指定所有必要的"数字"作为花车。