【问题标题】:Add values in MATLAB matrix based on pairs基于对在 MATLAB 矩阵中添加值
【发布时间】:2015-10-18 23:23:28
【问题描述】:

如果之前有人问过类似的问题,我们深表歉意。从表面上看,这似乎应该是一个简单的问题,但我无法描述这一点——更不用说解决它了!假设我有一个 5 x 3 矩阵,看起来像这样:

A = [50  1  2
     75  2  3 
     20  2  3
     10  1  1
     90  1  2]

我想对第一列中的值求和,只要第二列和第三列中有一对在其他地方重复。因此,我正在尝试将 A(上图)转换为类似 3 x 3 矩阵 B 的东西,其中:

    B = [140  1  2
         95   2  3 
         10   1  1] 

仅添加第 1 列中的值,我需要它们与“导致”它们组合的对保持匹配。我想我还应该补充一点,第 2 列和第 3 列中值的顺序确实很重要,因为 3,4 算作与 4,3 不同的对。 (当然,我的实际数据包括第 2 列和第 3 列中的值,其范围很广,范围很广,因此为每个可能的组合编写 if 语句实际上是不可能的......)

对此的任何建议将不胜感激!我正在研究关于“查找”的文档,偶然发现了一个叫做“ismember”的东西——我需要使用它的一些应用程序吗?

【问题讨论】:

    标签: arrays matlab matrix addition


    【解决方案1】:

    平常的unique-accumarray情侣很适合这个工作:

    [u, ~, v] = unique(A(:,2:end), 'rows', 'stable');
    B = [accumarray(v, A(:,1)) u];
    

    【讨论】:

    • 该死,现在你甚至没有等我发布一个低效的解决方案:D 干得好!我再次查看help accumarray 无济于事也许我应该首先将这些问题留给您;)
    • @AndrasDeak 这是惯用的accumarray 用法。你会学会爱上它:-)
    • 我不确定...每次看到它对我来说都很陌生:) 只是不符合我的思维方式。但是我很少需要做这样的事情,所以没关系:)
    • @AndrasDeak 你已经在使用bsxfun...accumarray 将是下一步:-D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多