【问题标题】:Matlab: Find duplicated values in column, and sum the values associated with them (in another column)Matlab:在列中查找重复值,并将与它们关联的值相加(在另一列中)
【发布时间】:2015-04-20 21:19:03
【问题描述】:

我猜想一个简单的问题:我有 2 个向量,一个有从 1 到 10 的索引号,另一个只有随机值。

id = [1 2 3 4 4 4 5 6 7 7];
val = [.8 .9 .12 .91 .63 .09 .28 .55 .96 .96 ] 

我正在寻找的结果应该是这样的:

new_id = [1 2 3 4 5 6 7];
val = [.8 .9 .12 1.63 .28 .55 1.92] 

我该怎么做? 谢谢!

【问题讨论】:

    标签: arrays matlab vector


    【解决方案1】:

    使用uniqueaccumarray

    [new_id, ~, v] = unique(id(:));
    val_summed = accumarray(v, val(:));
    

    即使id 不一定是正整数,上述方法也有效。如果是这样,另一种方法是使用sparse 进行求和并使用find 提取所需的结果:

    [new_id, ~, val_summed] = find(sparse(id, 1, val));
    

    【讨论】:

      【解决方案2】:

      你想要的函数叫做accumarray

      accumarray(id',val)
      

      它根据 id 下标计算新元素。

      【讨论】:

        猜你喜欢
        • 2012-08-09
        • 2019-03-17
        • 1970-01-01
        • 2021-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        相关资源
        最近更新 更多