Numpy - 矩阵乘法更快,有许多零项?

时间:2016-12-14 09:33:16

标签: python numpy matrix-multiplication multiplication symmetric

问题:在numpy中,我有一个矩阵M1,我与另一个矩阵M2相乘。

我知道我可以在M1中省略一半的值,因为生成的矩阵将是对称的,我只需要前k个值。

所以我想用numpy.tril将一半的值归零,希望基础C函数对于a*b乘法a==0更快,因为它们可以在看到a==0而不是做整个浮动操作。

我知道我可以计算时间,但我认为这是一个普遍感兴趣的问题。

请注意M1并不稀疏,只需要考虑其中的一半。

也许甚至有更好的方法可以节省50%的计算量?

背景:这与

有关
p(A|B)*p(B) == p(B|A)*p(A)

......如果你明白我的意思。

示例:这只是它发生的一点,但最后,我们有

  • a | A | x | A |矩阵p(A|B)(A和B是相同的变量)
  • a 1 x | A |矩阵p(B)
  • 结果是| A | x | A |矩阵p(A,B) = p(A|B)*p(B)我们不关心对角线,因为它是给出自身值的概率和对角线上方或下方的部分,因为它是另一半的复制品。非常适合进行健全检查,但毕竟不必要。

请注意,这里实际上不是点积。但我想一半导致p(A | B)的计算也是不必要的。

更新: 我将为此应用程序提供更合理的方法,即限制A和B不相交。然后所有矩阵都缩小了。它可以在numpy中优雅地完成,但增加了阅读代码的复杂性。

毕竟这没有意义。唯一的选择是创建重新创建三角形的M1.shape[0]-1子矩阵,但这肯定会产生太多的开销。

0 个答案:

没有答案