2

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

我知道我可以保留一半的值,M1因为生成的矩阵是对称的,我只需要最高k值。

因此,我正在考虑将numpy.tril一半的值归零,希望底层的 C 函数对于乘法运算会更快a*ba==0因为它们可以在看到a==0而不是执行整个浮点运算时停下来。

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

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

也许还有更好的方法来节省 50% 的计算?

背景:这与

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

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

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

  • 一个|一个| x |A| 矩阵p(A|B)(A和B是相同的变量)
  • 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重新创建三角形的子矩阵,但这肯定会产生太多开销。

4

0 回答 0