Numpy vectorize错误地将输出转换为整数

时间:2015-12-08 04:33:58

标签: 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]

我还检查了dtype。似乎vectorize函数正在从float64!

将类型转换为int64

2 个答案:

答案 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,你需要指定所有必要的"数字"作为花车。