这个操作可以在 Octave 中向量化吗?

Can this operation be vectorized in Octave?

我有一个矩阵 AB。我想计算它们之间的误差平方和 ss = sum(sum( (A-B).^2 )),但我只想在 NEITHER 矩阵元素完全为零时这样做。现在,我将按如下方式遍历每个矩阵:

for i = 1:N
  for j = 1:M
    if( A(i,j) == 0 )
      B(i,j) = 0;
    elseif( B(i,j) == 0 )
      A(i,j) = 0;
    end
  end
end 

然后取平方和。有没有办法对值的比较和重新分配进行矢量化?

如果您只是想实现所列代码正在做的事情,但以矢量化方式,您可以使用这种方法 -

%// Create mask to set elements in both A and B to zeros
mask = A==0 | B==0

%// Set A and B to zeros at places where mask has TRUE values
A(mask) = 0
B(mask) = 0

如果可以考虑找到 sum of squares errors after the listed code 的更大背景,您可以这样做 -

df = A - B;
df(A==0 | B==0) = 0;
ss_vectorized = sum(df(:).^2);

或者正如@carandraug 评论的那样,您可以在最后一步使用内置的 sumsq 计算平方和 -

ss_vectorized = sumsq(df(:));