我通读了Numpy Tutorial,它是说,一个示例代码这样的快速算法:numpy的阵列上
>>> X = np.ones(10, dtype=np.int)
>>> Y = np.ones(10, dtype=np.int)
>>> A = 2*X + 2*Y
是缓慢的,因为它以持有的A
值创建了三个不同的中间阵列, 2*X
和2*Y
。
相反,它认为,如果速度是一个问题进行这样同样的计算:
>>> X = np.ones(10, dtype=np.int)
>>> Y = np.ones(10, dtype=np.int)
>>> np.multiply(X, 2, out=X)
>>> np.multiply(Y, 2, out=Y)
>>> np.add(X, Y, out=X)
但我看不出的速度差是。在第二个代码中,X
和Y
似乎仍被创建为中间数组。在np.multiply
而不是2*X
的速度差异?
“在第二个代码,X和Y仍显示为中间阵列中创建” - 什么?不,他们是投入。代码重用它们来保存中间结果(废弃原始数据),而不是分配新数组。 – user2357112
查看http://stackoverflow.com/questions/27293830/utility-of-parameter-out-in-numpy-functions关于使用'out' –
@ThierryLathuille难题,这是有道理的,为什么第二个代码片段可以是有用的。 –