2013-10-28 37 views
3

我的理解是numpy的vectorize的一种用法允许我将数组发送到通常只需要标量的函数,而不是使用内置的map函数(与拉姆达函数等)。然而,在下面的情况下,当我使用map vs numpy.vectorize时,我得到了不同的结果,我似乎无法弄清楚为什么。Python地图和numpy之间的不同结果向量化

import numpy as np 

def basis2(dim, k, x): 
    y = np.array([-0.2, -0.13, -0.06, 0, 0.02, 0.06, 0.15, 0.3, 0.8, 
        1.6, 3.1, 6.1, 10.1, 15.1, 23.1, 30.1, 35.0, 40.0, 45.0, 50.0, 55.0]) 

    if x < y[k] or x > y[k + dim + 1]: 
     return 0 

    elif dim != 0: 
     ret = ((x - y[k])/(y[k + dim] - y[k])) * basis2(dim - 1, k, x) + (
      (y[k + dim + 1] - x)/(y[k + dim + 1] - y[k + 1])) * basis2(dim - 1, k + 1, x) 
     return ret 

    else: 
     return 1.0 

w = np.array([20.0, 23.1, 30.0]) 
func = lambda x: basis2(3, 14, x) 
vec = map(func, w) 

func2 = np.vectorize(basis2) 
vec2 = func2(3, 14, w) 

print vec # = [0, 0.0, 0.23335417007039491] 
print vec2 # = [0 0 0] 

回答

6

作为文档字符串表示:

vectorized的输出的数据类型是通过调用 与输入的第一个元素的函数来确定。通过指定otypes参数可以避免 。

你需要添加一个otypes的说法:在basis2()

func2 = np.vectorize(basis2, otypes="d") 

或更改return 0return 0.0

相关问题