NumPy:矩阵乘向量

4

我有一个名为A1的矩阵(18,11),还有三个名为normsoffsetspriorita的向量(18,1)。

当我尝试执行以下操作时:

A1 =  (A1 + offsets) / norms * priorita

I get the following error:

A1 =  (A1 + offsets) / norms * priorita
  File "/usr/lib/python2.7/dist-packages/numpy/matrixlib/defmatrix.py", line 330, in __mul__
    return N.dot(self, asmatrix(other))
ValueError: matrices are not aligned

由于矩阵看起来对齐,所以我无法理解它。你能帮助我理解这个错误吗?


如果 normsoffsetsprioritandim=2,那么使用 offsets.ravel()norms.ravel()priorita.ravel() 应该可以正常工作... - Saullo G. P. Castro
2个回答

2
当您有一个矩阵时,无论是一个矩阵和一个数组,还是两个矩阵,乘号(*)总是被视为矩阵乘法,因此会出现“未对齐”的错误,因为它不是在进行逐元素操作。您可以看到回溯到defmatrix.pyc中的__mul__()。 如果要进行您预期的向量操作,请使用np.multiply((A1 + offsets) / norms , priorita),这与np.matrix(np.array((A1 + offsets) / norms )* np.array(priorita))相同,但速度稍快,并且更易于阅读。

np.multiply((A1 + offsets) / norms , priorita) 是最好的方法。非常感谢。 - Riccardo Bartoli

1

(A1 + offsets) / norms 的形状为 (18, 11)。你不能将一个 (18, 11) 矩阵乘以一个 (18, 1) 向量(第二/列维度必须等于向量的维度)。我不确定你的实际目标是什么,但如果你的目标是标准矩阵-向量乘法,那么你可能需要转置矩阵:

A1 =  ((A1 + offsets) / norms).T * priorita

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接