【问题标题】:Matrix multiplication with multiple numpy arrays与多个 numpy 数组的矩阵乘法
【发布时间】:2018-11-15 22:28:26
【问题描述】:

将矩阵与 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.matmul(A, v)
    new_arr.append(sol)

【问题讨论】:

  • 什么样的乘法?跨行元素?
  • 请提供具有预期输出的示例数据。
  • 您的术语有点模糊。 A 的形状是什么。另一件事是列表还是数组?如果数组是什么dtype? “向量”的形状是什么?
  • matmul(和dot)的基本规则是A的最后一个维度与B的倒数第二个(或v的唯一一个)。你试过matmul(A, arr.T)吗?
  • 如果 A 是 (2,3) 并且 arr 是 (4,3), it should be clearer that you want to pair the 3's, and get a (2,4) or (4,2) result. To get that a transpose of either A` 或 arr 是必需的。

标签: python python-3.x numpy scipy


【解决方案1】:

好像你想要一个点积:

new_arr = np.dot(arr, A.T)

arrA 是 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]])

根据您的编辑,您想要的点积可能是:

new_arr = np.dot(A, arr).T

两者返回相同,但计算不同。

【讨论】:

  • 在这种情况下什么是 A.T?
  • 使用 numpy 对A 进行转置。
  • 根据两个矩阵的内容,你想要的也可能是np.dot(A, arr).T。根据您的编辑,可能是您想要的。
  • 哦,好吧。那讲得通。基本上我有一个尺寸为 50 x 30000 的矩阵。我需要将此矩阵乘以 numpy 数组中的每个向量。 dim=30000的向量有500个。这仍然是正确的吗?
  • 哦,拍摄。太感谢了!我完全倒退了我的两个矩阵。它现在可以工作了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多