【问题标题】:Summing rows to arbitrary columns in Matlab在Matlab中将行求和到任意列
【发布时间】:2017-10-10 19:35:04
【问题描述】:

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

一个随机的例子是:

t = rand(10, 5);

c = 兰迪([1 5], 1, 10);

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

有什么建议吗?

【问题讨论】:

    标签: arrays matlab matrix


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2018-05-26
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      相关资源
      最近更新 更多