总结Matlab中的每第n行

vai*_*tas 4 indexing matlab for-loop matrix vectorization

有没有简单的方法来总结Matlab中的每一行?让我们说:

A =

 1     2     3
 4     5     6
 7     8     9
10    11    12
13    14    15
16    17    18
Run Code Online (Sandbox Code Playgroud)

我想添加每两行,如下:row1+row3+row5,然后row2+row4+row6,所以我的输出是:

B =

21    24    27
30    33    36
Run Code Online (Sandbox Code Playgroud)

我知道有可能这样做sum(A(1:2:end,:))但是如果你有大矩阵和许多第n行这没有用,for循环是另一种选择,但我到目前为止无法使它工作.您是否有任何建议/解决方案如何通过for循环解决这个问题,或者是否有内置函数?

the*_*alk 6

那个怎么样?

B = cell2mat(arrayfun(@(x) sum(A(x:n:end,:)),1:n,'uni',0)')
Run Code Online (Sandbox Code Playgroud)

我首先考虑使用accumarray但它需要一个矢量作为输入.如果你按照这个答案,它仍然是可能的.

另一种准确的选择:

[a,b] = size(A);
idx = bsxfun(@plus, 1:b,repmat([0:b:b*n-1]',a/n,1)) 
B = reshape(accumarray(idx(:),A(:)),b,[]).'
Run Code Online (Sandbox Code Playgroud)