evangelioncy 发表于 2014-5-28 15:05

如何删除矩阵中某几列相同的行

例如:a=;   只比较a矩阵的1、2列是否相同,如果1、2列的数值相同,则删除对应的行,不比较第三列的数值。a中第4行的一、二列,第5行的一、二列重复,删除相应行,最终的到矩阵 b=;求高手指导!!感谢!!!

chybeyond 发表于 2014-5-28 16:35

[~, ind, ~]=unique(a(:,1:2), 'rows', 'stable')
b = a(ind, :);

chybeyond 发表于 2014-5-28 17:04

chybeyond 发表于 2014-5-28 16:35


是运行错误,还是结果错误。。

牛小贱 发表于 2014-5-28 17:08

chybeyond 发表于 2014-5-28 17:04
是运行错误,还是结果错误。。

运行结果如图:

chybeyond 发表于 2014-5-28 17:16

本帖最后由 chybeyond 于 2014-5-28 17:20 编辑

牛小贱 发表于 2014-5-28 17:08
运行结果如图:
可能版本不一样,我用2012a,可以正常运行
[~, ind, ~]=unique(a(:,1:2), 'rows', 'stable');
b = a(ind, :)

b =

   1   2   1
   2   3   1
   4   5   2
   4   2   3

chybeyond 发表于 2014-5-28 17:24

本帖最后由 牛小贱 于 2014-5-28 17:27 编辑

或者:a=; [~,ind,~]=unique(a(:, 1:2), 'rows', 'first');
b=a(sort(ind), :)

牛小贱 发表于 2014-5-28 17:26

chybeyond 发表于 2014-5-28 17:24
或者: [~,ind,~]=unique(a(:, 1:2), 'rows', 'first');
          b=a(sort(ind), :)

这条代码可以运行,上一条代码,我在其他电脑上运行也出错误~谢谢解答!!

chybeyond 发表于 2014-5-28 17:32

牛小贱 发表于 2014-5-28 17:26
这条代码可以运行,上一条代码,我在其他电脑上运行也出错误~谢谢解答!!

如果是2012a及以上版本应该不会出错,2010help unique还没有stable这个选项。
2012unique代码:flagvals = {'rows' 'first' 'last' 'sorted' 'stable' 'legacy' 'R2012a'};
2010unique代码:flagvals = {'rows' 'first' 'last'};
页: [1]
查看完整版本: 如何删除矩阵中某几列相同的行