仅保留间隔内具有最大元素的矩阵行

时间:2014-05-06 13:20:49

标签: matlab

我有一个矩阵,其中最右边的元素以降序重复YYYYMMDD日期,例如:

      40        1630        1711    20140326
     169         700         950    20140326
      40        1630        1711    20140326
     169         700         950    20140327
      40        1630        1711    20140327
     169         700         950    20140327
      40        1630        1711    20140327
     169         700         950    20140328
      40        1630        1711    20140328
     169         700         950    20140328
      40        1630        1711    20140328
    3049         700         950    20140331
      40        1630        1711    20140331
    3049         700         950    20140331
      40        1630        1711    20140331
     169         700         950    20140401
      40        1630        1711    20140401
     169         700         950    20140401
      40        1630        1711    20140401
     169         700         950    20140402
      40        1630        1711    20140402

在每个日期中,我想只保留与最大元素对应的行 在最左边的列中。所以我想制作一个新矩阵:

     169         700         950    20140326
     169         700         950    20140327
     169         700         950    20140328
    3049         700         950    20140331
     169         700         950    20140402

这样做的最佳方式是什么?

创意:使用diff查找日期更改时的索引,并使用for循环使用max循环查找正确的行。没有for循环的任何解决方案?

1 个答案:

答案 0 :(得分:5)

根据第一列尝试先sort the rows,然后根据最后一列找到第一个unique dates

B = sortrows(A)
[~, ia] = unique(B(:,4))
B(ia,:)
ans =
        169        700        950   20140326
        169        700        950   20140327
        169        700        950   20140328
       3049        700        950   20140331
        169        700        950   20140401
        169        700        950   20140402