稀疏SciPy矩阵与两个NumPy向量的矩阵乘法

时间:2018-01-13 20:17:45

标签: python numpy scipy matrix-multiplication

假设我想计算二次形式x^T A y,其中xy是NumPy向量,并且我已将A存储为SciPy csc_matrix为了提高效率。

似乎执行计算的一种方法是

(x * A).dot(y)

因为SciPy将*用于矩阵产品,而NumPy则使用.dot

虽然这种方法给了我正确的答案,但对我来说这似乎是违反直觉的,我想知道是否有更可读/更有效的方法?

1 个答案:

答案 0 :(得分:1)

正如Paul Panzer所说,x @ A @ y最具可读性并且按预期工作(需要Python 3.5+和NumPy 1.10+)。

SciPy也使用dot进行矩阵乘法,在他们自己的sparse matrices page示例中。所以你可以像

一样使用点
x.dot(A.dot(y))

A.dot(y).dot(x)虽然后者更难阅读,因为x不合适。

你不能使用x.dot(A).dot(y)的唯一原因是NumPy不理解稀疏矩阵,因此x的点方法不适合用稀疏矩阵进行乘法。

虽然SciPy稀疏矩阵将x * AA * y解释为矩阵乘法,但我宁愿永远不要使用该选项,因为如果A由于某种原因改变为密集矩阵,则存在错误操作的风险。看起来在SciPy文档中不会提升*的这种用法;所有示例都使用dot