我正在尝试向量化一个for循环,该向量将向量与另一个向量定义的索引相加。有很多矢量可以求和。这在for循环中很容易完成,但对我来说可能不是以矢量化的方式。
一个随机的例子是:
t = rand(10,5);
c = randi([1 5],1,10);
基本上,我现在需要对每一行求和,直到由与当前行t相同的c索引给出的相应列。返回值将是到其各自列c(i)的行和的向量。我已经探索了很多我能想到的sum函数的操作但没有达到最终结果。
有什么建议吗?
答案 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)