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]