声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1462|回复: 10

[编程技巧] 如何删除矩阵中某几列相同的行

[复制链接]
发表于 2014-5-28 15:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

使用道具 举报

发表于 2014-5-28 16:35 | 显示全部楼层
  1. [~, ind, ~]=unique(a(:,1:2), 'rows', 'stable')
  2. b = a(ind, :);
复制代码


点评

貌似还有点小错误~请再检查一下。  发表于 2014-5-28 16:59
发表于 2014-5-28 17:04 | 显示全部楼层

是运行错误,还是结果错误。。
发表于 2014-5-28 17:08 | 显示全部楼层
chybeyond 发表于 2014-5-28 17:04
是运行错误,还是结果错误。。

运行结果如图: 搜狗截图20140528170743.png

发表于 2014-5-28 17:16 | 显示全部楼层
本帖最后由 chybeyond 于 2014-5-28 17:20 编辑

可能版本不一样,我用2012a,可以正常运行
  1. [~, ind, ~]=unique(a(:,1:2), 'rows', 'stable');
  2. b = a(ind, :)

  3. b =

  4.      1     2     1
  5.      2     3     1
  6.      4     5     2
  7.      4     2     3
复制代码
发表于 2014-5-28 17:24 | 显示全部楼层
本帖最后由 牛小贱 于 2014-5-28 17:27 编辑

或者:
  1. a=[1 2 1;2 3 1;4 5 2;1 2 2;2 3 3;4 2 3]; [~,ind,~]=unique(a(:, 1:2), 'rows', 'first');
  2. b=a(sort(ind), :)
复制代码

点评

赞成: 5.0
赞成: 5
  发表于 2014-5-28 17:27

评分

1

查看全部评分

发表于 2014-5-28 17:26 | 显示全部楼层
chybeyond 发表于 2014-5-28 17:24
或者: [~,ind,~]=unique(a(:, 1:2), 'rows', 'first');
          b=a(sort(ind), :)

这条代码可以运行,上一条代码,我在其他电脑上运行也出错误~谢谢解答!!
发表于 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'};

点评

赞成: 5.0
赞成: 5
奥,涨姿势了啊!!谢谢分享!!  发表于 2014-5-28 17:34

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-28 20:12 , Processed in 0.090052 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表