Ada*_*ted 3 python numpy matrix vectorization
因此,这个"问题"的背景是我正在尝试优化大型python项目.我开始为程序计时,并注意到几乎50%的运行时间花费在与此类似的计算上:
import numpy as np
# Example
A = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
X = np.random.multivariate_normal([0,0,0,0],np.eye(4),15000)
# Create a lambda function to use row based
F = lambda x: np.dot(A,x)
# Now calculating the value
answer = np.apply_along_axis(F, 1, X)
print answer.shape
Run Code Online (Sandbox Code Playgroud)
我试图找到一种方法来加快速度,但不断碰壁.这真的是这样做的最佳选择吗?
我们可以使用np.dot上X,并A失去了他们的第二轴每个.要输入np.dot,我们将使用X第一个输入和转置A将其第二个轴置于前面以用作第二个输入.
因此,我们会像这样输出 -
X.dot(A.T)
Run Code Online (Sandbox Code Playgroud)
有关样本输入的运行时测试 -
In [192]: %timeit np.apply_along_axis(F, 1, X)
1 loops, best of 3: 185 ms per loop
In [193]: %timeit X.dot(A.T)
1000 loops, best of 3: 228 µs per loop
In [194]: np.allclose(np.apply_along_axis(F, 1, X), X.dot(A.T))
Out[194]: True # verified results against original code
Run Code Online (Sandbox Code Playgroud)