我想执行该阵列上的工作方式类似于numpy.sum功能上期望的功能,例如np.sum([2,3],1)= [3,4]和np.sum([1,2] ,[3,4])= [4,6]。
然而,一个简单的测试已经实施的行为莫名其妙的尴尬:
import numpy as np
def triv(a, b): return a, b
triv_vec = np.vectorize(fun, otypes = [np.int])
triv_vec([1,2],[3,4])
使用结果:
array([0, 0])
而不是所希望的结果:
array([[1,3], [2,4]])
任何想法,这是怎么回事? 谢谢
您需要otypes=[np.int,np.int]
triv_vec = np.vectorize(triv, otypes=[np.int,np.int])
print triv_vec([1,2],[3,4])
(array([1, 2]), array([3, 4]))
otypes:STR或dtypes的列表,可选
输出的数据类型。 它必须被指定为一个的类型代码的字符串或数据类型说明符的列表。 应该有用于每个输出一个数据类型说明符。
我原来的问题是专门的事实,矢量化正在进行内部型铸造和运行优化的内部循环,这多少会影响性能。 因此,这里的答案:
确实如此,但并非只有<23%的效果并不如相当大的,因为我认为。
import numpy as np
def make_tuple(a, b): return tuple([a, b])
make_tuple_vec = np.vectorize(make_tuple, otypes = [np.int, np.int])
v1 = np.random.random_integers(-5, high = 5, size = 100000)
v2 = np.random.random_integers(-5, high = 5, size = 100000)
%timeit [tuple([i,j]) for i,j in zip(v1,v2)] # ~ 596 µs per loop
%timeit make_tuple_vec(v1, v2) # ~ 544 µs per loop
此外正如所料,该元组生成函数不矢量像例如在地图功能图谱(make_tuple,V1,V2),这是用100倍慢exectution时间竞争的明确宽松的:
%timeit map(make_tuple, v1, v2) # ~ 64.4 ms per loop