问题:在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)
......如果你明白我的意思。
示例:这只是它发生的一点,但最后,我们有
p(A|B)
(A和B是相同的变量)p(B)
p(A,B) = p(A|B)*p(B)
我们不关心对角线,因为它是给出自身值的概率和对角线上方或下方的部分,因为它是另一半的复制品。非常适合进行健全检查,但毕竟不必要。请注意,这里实际上不是点积。但我想一半导致p(A | B)的计算也是不必要的。
更新: 我将为此应用程序提供更合理的方法,即限制A和B不相交。然后所有矩阵都缩小了。它可以在numpy中优雅地完成,但增加了阅读代码的复杂性。
毕竟这没有意义。唯一的选择是创建重新创建三角形的M1.shape[0]-1
子矩阵,但这肯定会产生太多的开销。