Matrix 这个运算可以用八度音阶矢量化吗?

Matrix 这个运算可以用八度音阶矢量化吗?,matrix,octave,vectorization,Matrix,Octave,Vectorization,我有一个矩阵a和B。我想取它们之间的平方和误差ss=sum(sum((A-B)。^2)),但我只想在两个矩阵元素都不等于零的情况下这样做。现在,我将对每个矩阵进行如下处理: 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 然后再求平方和。有没有一种方法可以对值的比较和重新分配进行矢量化?

我有一个矩阵
a
B
。我想取它们之间的平方和误差
ss=sum(sum((A-B)。^2))
,但我只想在两个矩阵元素都不等于零的情况下这样做。现在,我将对每个矩阵进行如下处理:

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
如果可以考虑在列出的代码之后查找
平方和误差的更大范围,则可以使用此-

df = A - B;
df(A==0 | B==0) = 0;
ss_vectorized = sum(df(:).^2);
或者正如@carandraug所评论的,您可以在最后一步使用内置的
sumsq
进行平方和计算-

ss_vectorized = sumsq(df(:));

使用
sumsq(df(:)
而不是
sum(df(:)。^2)
@carandraugnice,谢谢!我不知道内置的八度音阶!编辑。