在Matlab中将行汇总到任意列

时间:2017-05-11 16:55:53

标签: arrays matlab matrix

我正在尝试向量化一个for循环,该向量将向量与另一个向量定义的索引相加。有很多矢量可以求和。这在for循环中很容易完成,但对我来说可能不是以矢量化的方式。

一个随机的例子是:

t = rand(10,5);

c = randi([1 5],1,10);

基本上,我现在需要对每一行求和,直到由与当前行t相同的c索引给出的相应列。返回值将是到其各自列c(i)的行和的向量。我已经探索了很多我能想到的sum函数的操作但没有达到最终结果。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

一种方法是使用bsxfun创建要包含在每行总和中的值的掩码:

result = sum(t .* bsxfun(@le, 1:size(t,2), c(:)), 2);

在Matlab R2016b或更新版本中,您可以使用implicit expansion代替bsxfun

result = sum(t .* (1:size(t,2) <= c(:)), 2)