代码之家  ›  专栏  ›  技术社区  ›  Matthew Thirkettle

一种求矩阵子向量的有效方法

  •  4
  • Matthew Thirkettle  · 技术社区  · 6 年前

    假设我们有一个矩阵

    A = [1 2 ; 3 4 ; 5 6];
    

    和逻辑矩阵

    B = [false true ; true true ; true false ];
    

    我想得到元素的行积 A 使相应的元素 B 是真的。在上面的例子中,答案是

    C = [2 ; 3*4, 5] = [2 ; 12 ; 5];
    

    一种方法是:1)掌握 关于 ;2)取幂矩阵的行积:

    C = prod(A.^B,2);
    

    C

    2 回复  |  直到 6 年前
        1
  •  4
  •   Iban Cereijo    6 年前

    我觉得你的方法很快。如果你真的有一个瓶颈,你可以尝试使用更便宜的运算符,比如加法和乘法:

    C = prod(A.*B + ~B, 2);
    

    octave 但速度是原来的两倍。

    另一种不太紧凑的方式,也很快进入 倍频程 :

    C=A; C(~B)=1; C=prod(C,2);
    
        2
  •  2
  •   Luis Mendo    6 年前

    这是另一种方法,使用 accumarray . 我怀疑它更快:

    [ii, ~] = find(B); % create grouping variable
    C = accumarray(ii, A(B), [], @prod); % compute product of each group