首页 > 解决方案 > numpy向量乘法速度?

问题描述

我是 numpy 的新手,发现了这种奇怪的(对我而言)行为。我正在实现逻辑回归成本函数,这里我有 2 个具有相同维度和相同类型的列向量(dfloat)。y 包含一堆零和一,a 包含范围 (-1, 1) 内的浮点数。在某些时候我应该得到点积,所以我转置一个并将它们相乘:

   x = y.T @ a

但是当我使用

   x = y @ a.T

偶尔性能下降约 3 倍,而结果是一样的 为什么会这样?操作不一样吗?谢谢。

标签: pythonnumpy

解决方案


性能下降,得到一个非常不同的答案!

对于向量乘法(与数字乘法不同)a @ b != b @ a。在您的情况下(假设列向量),a.T @ b是一个数字,但是a @ b.T是一个成熟的矩阵!所以,如果你的向量都是 (1, y) 的形状,最后一个操作将产生一个 (y, y) 矩阵,它可能非常大。当然,计算这样一个矩阵(也就是将大量数字相加并产生大量数字)要比将一堆数字相加并产生一个数字要花费更多的时间。

这就是矩阵(或向量)乘法的工作原理。


推荐阅读