假设:
向量v1,v2(nx1),其中每个向量中的条目位于区间[0,1]中。 v1和v2可以是稀疏的或密集的
密集对称矩阵M(nxn)(实际上是条目为0或1的逻辑矩阵)
密集矩阵E(nxn)其中E(i,j)= 1-E(j,i)其中E(i,j)在区间中0,1 [。 这种矩阵的名称是否有E(i,j)= 1-E(j,i)?
我想计算s = Sum [(v1 * v2 ^ T)。* M]其中。*是逐元素乘法运算,Sum是所得矩阵的所有条目的总和。 ^ T是换位操作。
给定s我想获得x = Sum [(v1 * v2 ^ T)。* E] / s
是否有任何计算上更有效的方法来执行这些乘法并获得x?
感谢。
答案 0 :(得分:0)
你的.* M
乘法只是一个选择,因此可以更容易地将这些选定的元素加起来(在伪代码中,因为你没有给出语言的指示):
sum = 0;
for i=1 to n
for j = i to n
if M(i,j) then
sum += v1(i)*v2(j)+v1(j)*v2(i);
endif
endfor
endfor
不是进行所有2 * n ^ 2次乘法和n ^ 2次加法,而是仅执行2 * k次加法和k次乘法(其中k是M的非零项的数量,其最多为n ^ 2)。
对于第二个操作,我认为无法加速它们,所以你必须明确地计算它们。