Python 多个numpy数组的矩阵乘法
将矩阵与向量的numpy数组相乘的最快方法是什么?我需要将矩阵a乘以1000个向量列表中的每个向量。使用for循环花费的时间太长,所以我想知道是否有一种方法可以同时将它们相乘 例如:Python 多个numpy数组的矩阵乘法,python,python-3.x,numpy,scipy,Python,Python 3.x,Numpy,Scipy,将矩阵与向量的numpy数组相乘的最快方法是什么?我需要将矩阵a乘以1000个向量列表中的每个向量。使用for循环花费的时间太长,所以我想知道是否有一种方法可以同时将它们相乘 例如: arr = [[1,1,1], [1,1,1],[1,1,1]] A= [2 2 2] [2 2 2] 所以我需要乘以arr中每个v的Av。结果是: arr = [[6,6], [6,6], [6,6]] 有没有比以下更快的方法: new_arr = [] for v in arr: sol = np
arr = [[1,1,1], [1,1,1],[1,1,1]]
A=
[2 2 2]
[2 2 2]
所以我需要乘以arr中每个v的Av。结果是:
arr = [[6,6], [6,6], [6,6]]
有没有比以下更快的方法:
new_arr = []
for v in arr:
sol = np.matmul(A, v)
new_arr.append(sol)
似乎您想要一个点产品:
new_arr = np.dot(arr, A.T)
其中arr
和A
是numpy数组:
arr = np.array([[1,1,1], [1,1,1],[1,1,1]])
A = np.array([[2,2, 2],[2,2,2]])
结果:
array([[6, 6],
[6, 6],
[6, 6]])
根据您的编辑,您想要的dot产品可能是:
new_arr = np.dot(A, arr).T
两者都返回相同的结果,但计算结果不同。哪种乘法?跨行元素?请提供具有预期输出的示例数据。您的术语有点模糊。
A
的形状是什么。另一个是列表还是数组?如果是数组,那么数据类型是什么?“向量”的形状是什么?matmul
(和dot
)的基本规则是A
的最后一个维度与B
(或v
)中的第二个到最后一个维度配对。您是否尝试过matmul(A,arr.T)
?如果A
是(2,3)而arr
是(4,3),那么您应该更清楚地想将3配对,并得到(2,4)或(4,2)结果。要获得
a`或arr
的转置是必需的。在这种情况下,a.T是什么?使用numpy对a
进行转置。根据两个矩阵的内容,您需要的也可能是np.dot(a,arr).T
。根据你的编辑,这可能是你想要的。哦,好的。这是有道理的。基本上我有一个50 x 30000的矩阵。我需要将这个矩阵乘以numpy数组中的每个向量。有500个dim=30000的向量。这仍然是正确的吗?噢,天哪。非常感谢你!我完全颠倒了我的两个矩阵。现在可以了:)