【问题标题】:Can this operation be vectorized in Octave?这个操作可以在 Octave 中向量化吗?
【发布时间】:2015-04-13 19:11:37
【问题描述】:

我有一个矩阵 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 

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

【问题讨论】:

    标签: matrix octave vectorization


    【解决方案1】:

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

    %// 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(:));
    

    【讨论】:

    • 使用sumsq (df(:))而不是sum (df(:).^2)会更快(并且内存效率更高)
    • @carandraug 很好,谢谢!不知道内置的八度!已编辑。
    猜你喜欢
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 2018-06-24
    • 2021-09-02
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多