我有一个主矩阵,比方说
A=magic(5);
还有一个向量
v=[1;3;5;2;2];
我想以这种方式逐行添加 A 的元素:将第一行从 v(1)st 元素添加到末尾,将第二行从 v(2)rd 元素添加到末尾,第三行从第 v(3) 个元素到最后,依此类推。
我知道我可以使用 for 循环来做到这一点。但我想知道是否有矢量化的方法来做到这一点。
编辑: 让我用一个例子来澄清我的问题: 假设 A 和 v 如上。
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
和
v =
1
3
5
2
2
现在我想要一种方法来获得以下结果:
answer =
65 % 17+24+1+8+15
37 % 7+14+16
22 % 22
55 % 12+19+21+3
54 % 18+25+2+9
最佳答案
您可以在行中使用 cumsum
。解决方案有点复杂,所以我将从一个更简单的示例开始:
假设您想对 A
的第 i
行的所有元素求和,直到(包括)第 v(i)
地方:res_i =\sum_{k=1..v(i)} A_ik
m = size(A,1); % num of rows
csA = cumsum(A, 2); % cumsum along rows
res = csA( sub2ind( size(A), 1:m, v ) ); % pick the vi-th column for the i-th row
现在,对于你的问题,因为你想要所有元素的总和从 v(i)
到最后,我们需要翻转A
并相应地更改 v
[m n] = size(A);
fA = fliplr(A);
fv = n + 1 - v; % flip the meaning of v
csA = cumsum( fA, 2 );
res = csA( sub2ind( [m n], 1:m, fv ) ); % should do the trick...
关于matlab - 从每行中添加不同数量的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16215383/