matlab - 从每行中添加不同数量的元素

标签 matlab vectorization

我有一个主矩阵,比方说

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/

相关文章:

C#和Matlab读取视频帧rgb值的区别

python - 使用 mex 函数转换 c 编程文件

MATLAB: reshape 3D 矩阵的每个切片

python - pandas 数据系列的矢量化标准差计算

matlab - Matlab 中向量/数组乘法的快速方法

python - Scipy 按元素最小化目标

c - 如何将指针传递给 C 中的 vector 扩展

matlab - 如何找到两条曲线之间的相似度和相似度得分?

matlab 返回向量中每第二次出现的值

python - 使用 numpy vectorize 在二维数组中仅对一个轴进行矢量化