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,谢谢!我不知道内置的八度音阶!编辑。