这个操作可以在 Octave 中向量化吗?
Can this operation be vectorized in Octave?
我有一个矩阵 A
和 B
。我想计算它们之间的误差平方和 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(:));
我有一个矩阵 A
和 B
。我想计算它们之间的误差平方和 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(:));