Numpy:有效矩阵计算A*xj,其中xj是X中的j行

2024-03-28 10:55:13 发布

您现在位置:Python中文网/ 问答频道 /正文

所以这个“问题”的背景是我正在尝试优化一个大型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

我试着想办法让它快点,但总是撞到墙上。这真的是最佳的做法吗?你知道吗


Tags: 项目lambdaanswerimport程序numpyexampleas
1条回答
网友
1楼 · 发布于 2024-03-28 10:55:13

我们可以在XA上使用^{}来分别丢失它们的第二个轴。要输入到np.dot,我们将使用X作为第一个输入,并转置A,将其第二个轴置于前面用作第二个输入。你知道吗

因此,我们会得到这样的输出-

X.dot(A.T)

问题中列出的示例输入的运行时测试-

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

相关问题 更多 >