2015-10-18 49 views
3

如果之前曾有类似的问题,请致歉。这看起来应该是一个简单的问题,但我无法描述这一点 - 更不用说解决它了!让我们假设我有一个5×3矩阵,它看起来是这样的:根据配对在MATLAB矩阵中添加值

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

我要总结在第一列中的值,只要有在第2和被复制别处第三列一对。所以,我想A(上面)转化为像这样3×3的矩阵B,其中:

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

从第1列就值得到补充,我需要他们留下来匹配一对那“造成”他们结合。我想我还应该补充一点,在第2列中的值的顺序确实很重要,因为3,4中的数值与4,3中的数值不同。 (当然,我的实际数据包括列2 & 3列中的值,范围很好到100,所以为每个可能的组合编写一条if语句不是真的有可能......)

对此的任何建议都会很多不胜感激!我正在研究关于“find”的文档,并偶然发现了一个名为“ismember”的东西 - 我是否需要使用某些应用程序?

回答

3

通常unique - accumarray夫妇是适合这份工作:

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

该死的,现在你甚至没有等我发布一个低效的解决方案:d干得漂亮!再次,我看着'帮助accumarray'无济于事也许我应该离开这些问题给你首先;) –

+0

@AndrasDeak这是惯用'accumarray'使用。你会学会喜欢它:-) –

+0

我不确定......每当我看到它时,对我而言都很陌生:)只是不适合我的思维方式。但我很少需要做这样的事情,所以它没问题:) –