找回密码
 注册
Simdroid-非首页
查看: 103|回复: 7

有关删除重复行的问题。

[复制链接]
发表于 2009-5-21 03:41:25 | 显示全部楼层 |阅读模式 来自 英国
本帖最后由 renfeifan2008 于 2009-5-21 03:43 编辑

A =
     1     1     2     3     4
     2     4     5     6     7
     3     3     4     1     2
     4     7     8     9    10
如上,A(1,2:5) 与A(3,2:5) 元素相同,但是顺序不同。有没有好的办法能够删除第三行,且第四排的4变为第三排的3。得到
B =
     1     1     2     3     4
     2     4     5     6     7
     3     7     8     9    10
当然我只写了一部分。矩阵行数很多,且每一行后面四个元素重复的次数均为2次。
我编写了一个程序,但是运算起来较慢,如下,有没有简单点儿的程序,还望指教。
clear;
clc;
A=[1 1 2 3 4; 2 4 5 6 7; 3 3 4 1 2; 4 7 8 9 10];
B=[];
n=2;
for i=2:size(A,1)
    for j=1:i-1
        if ismember(A(i,2:5),A(j,2:5))==[1,1,1,1];
            n=n-1;
           break;
        else
            B(n, : )=[A(1,1)+n-1,A(i, 2:5)];
        end
    end
    n=n+1
end
B(1, ; )=A(1, : );
发表于 2009-5-21 08:20:57 | 显示全部楼层 来自 台湾台北
Simdroid开发平台
个人以为运算较慢原因可能有二
B一直重覆改变size大小
使用loop, logical好像不怎好

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-5-21 11:44:54 | 显示全部楼层 来自 大连理工大学
运算慢是由于你利用的循环太多了,没有发挥matlab的优势,如果你实在要利用循环的话,可以利用fortran,比matlab快多了,呵呵。
回复 不支持

使用道具 举报

发表于 2009-5-21 11:58:17 | 显示全部楼层 来自 新疆乌鲁木齐
既然第一列不参与排序可以直接去掉最后处理:
  1. %% 排序
  2. clc
  3. A =[1     1     2     3     4;
  4.      2     4     5     6     7;
  5.      3     3     4     1     2;
  6.      4     7     8     9    10];
  7. B=A(:,2:5);
  8. [C,Ix]=sort(B')
  9. [b,m,n] = unique(C', 'rows')
复制代码
这个例子并没有完全解决1楼的问题,不过接近了许多(有别的事情要做,没有时间细化),思路无非先升序后排除。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2009-5-21 18:16:11 | 显示全部楼层 来自 英国
谢谢大家的解答,不过,能不能不排序啊?因为后面几个数字排列方式是有用的。
回复 不支持

使用道具 举报

发表于 2009-5-21 18:24:27 | 显示全部楼层 来自 浙江杭州
不排序,就得用循环了,太慢了。

用排序也无所谓吧,排序前行的位置都在 [C,Ix], [b,m,n] 里存着呢,你用哪个数字排列方式,根据 [C,Ix], [b,m,n]在原矩阵中找不就行了。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-5-21 18:28:10 | 显示全部楼层 来自 新疆乌鲁木齐
已考虑,也正因排序题目才增加了难度,按我的代码排序之后应该可以还原顺序,请注意我使用了
  1. [C,Ix]=sort(...)
复制代码
  1. [b,m,n]=unique(...)
复制代码
矩阵索引,也就是你要的顺序排列信息放在了Ix或者m、n中.

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2009-5-21 22:32:14 | 显示全部楼层 来自 英国
谢谢大家的建议。我再看看。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-24 05:06 , Processed in 0.061392 second(s), 21 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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