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函数是否正确?