24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1497  |  回复: 7

sweet711

金虫 (小有名气)

[求助] 请教 matelab 矩阵按需求删除某些行

我有3个矩阵,行数可能不一样,列数相同。我希望从每个矩阵里面删除某些行,把这三个矩阵弄成行数相同的矩阵。 删除的标准是,如果某行的第一列数字和第二列数字同时存在于所有矩阵的某一行的第一列与第二列中,则保留该行。例如下面三个矩阵:只有3 11,5 10, 4 13存在于所有矩阵中,所以3 11,5 10, 4 13 所在的行都保留下来

删除前:
matix 1
3   10   0.4473     0.4998     0.5284     
3   11   0.1380     3.3635     2.7002   
5   10   4.0288     4.9449     1.4095     
4   13   1.8280     5.0043     2.4272      

matrix 2
3   11   0.1462     3.4001     2.7230     
5   10   4.0535     4.8938     1.4548     
4   13   1.8416     5.0022     2.4001   
6   11   4.2333     1.4657     2.4669   
9   14   0.0801     5.1012     4.2993     

matrix 3
3   10   0.2510     0.3264     0.7812      
2  16   1.7152     1.9370     1.7490     
3   11   0.2548     3.5641     2.6389   
5   10   4.0846     4.7689     1.4941   
8   10   5.3900     2.9729     0.6334     
4   13   1.9304     5.0974     2.2305     
6   11   4.3721     1.5243     2.4893   
9   11   5.5361     5.3065     4.1403     
15  13   2.2028     3.0847     4.0501     

删除后得到:
new matrix1
3  11   0.1380     3.3635     2.7002   
5  10   4.0288     4.9449     1.4095     
4  13   1.8280     5.0043     2.4272

new matrix2
3  11   0.1462     3.4001     2.7230     
5  10   4.0535     4.8938     1.4548     
4  13   1.8416     5.0022     2.4001   

new matrix 3
3  11   0.2548     3.5641     2.6389   
5  10   4.0846     4.7689     1.4941   
4  13   1.9304     5.0974     2.2305

不知道我说清除没有,实际情况比这个例子复杂,不止3个矩阵。请高手赐教!谢谢!
回复此楼

» 收录本帖的淘帖专辑推荐

经典帖子淘~

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

感谢参与,应助指数 +1
我没有找到简便方便方法
CODE:
%测试矩阵,3个
m1 = [3   10   0.4473     0.4998     0.5284     
3   11   0.1380     3.3635     2.7002   
5   10   4.0288     4.9449     1.4095     
4   13   1.8280     5.0043     2.4272];
m2 = [3   11   0.1462     3.4001     2.7230     
5   10   4.0535     4.8938     1.4548     
4   13   1.8416     5.0022     2.4001   
6   11   4.2333     1.4657     2.4669   
9   14   0.0801     5.1012     4.2993];
m3 = [3   10   0.2510     0.3264     0.7812      
2  16   1.7152     1.9370     1.7490     
3   11   0.2548     3.5641     2.6389   
5   10   4.0846     4.7689     1.4941   
8   10   5.3900     2.9729     0.6334     
4   13   1.9304     5.0974     2.2305     
6   11   4.3721     1.5243     2.4893   
9   11   5.5361     5.3065     4.1403     
15  13   2.2028     3.0847     4.0501];

%按照规则规律,得到满足要求的前两列
m123 = intersect(intersect(m1(:,1:2),m2(:,1:2),'rows'),m3(:,1:2),'rows');

%选取原矩阵中满足条件的
m1 = m1(ismember(m1(:,1:2),m123,'rows'),:);
m2 = m2(ismember(m2(:,1:2),m123,'rows'),:);
m3 = m3(ismember(m3(:,1:2),m123,'rows'),:);

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2012-06-21 01:13:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
sweet711: 金币+25, ★★★很有帮助, 谢谢高手点拨。虽然答案只针对了3个矩阵,但提供了很好的思路。谢谢。 2012-06-21 15:26:38
sweet711: 金币+15, ★★★★★最佳答案, 追加金币 2012-06-22 00:10:52
结果如下:
CODE:
m1 =
    3.0000   11.0000    0.1380    3.3635    2.7002
    5.0000   10.0000    4.0288    4.9449    1.4095
    4.0000   13.0000    1.8280    5.0043    2.4272
m2 =
    3.0000   11.0000    0.1462    3.4001    2.7230
    5.0000   10.0000    4.0535    4.8938    1.4548
    4.0000   13.0000    1.8416    5.0022    2.4001
m3 =
    3.0000   11.0000    0.2548    3.5641    2.6389
    5.0000   10.0000    4.0846    4.7689    1.4941
    4.0000   13.0000    1.9304    5.0974    2.2305

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
3楼2012-06-21 01:15:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
sweet711: 金币+5, ★★★很有帮助, 谢谢参与讨论,我试着写个函数来实现。 2012-06-21 15:27:26
sweet711: 金币+5, ★★★很有帮助, 追加金币 2012-06-22 00:11:13
引用回帖:
3楼: Originally posted by libralibra at 2012-06-21 01:15:02
结果如下:
m1 =
    3.0000   11.0000    0.1380    3.3635    2.7002
    5.0000   10.0000    4.0288    4.9449    1.4095
    4.0000   13.0000    1.8280    5.0043    2.4272
m2 =
    3.0000   11.000 ...

写个函数会好点吧,楼主说明的是不止3个矩阵....
比较笨的办法,就是一个一个的排除,效率比较低。比较好的办法就是给矩阵排个序,然后再查找删除,也许效率高点,估计实现起来稍微有点复杂...
4楼2012-06-21 06:35:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sweet711

金虫 (小有名气)

追加20个金币,求更简便的方法。实际情况有上千个矩阵。
5楼2012-06-21 15:30:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sweet711

金虫 (小有名气)

引用回帖:
4楼: Originally posted by lijie169 at 2012-06-20 23:35:25
写个函数会好点吧,楼主说明的是不止3个矩阵....
比较笨的办法,就是一个一个的排除,效率比较低。比较好的办法就是给矩阵排个序,然后再查找删除,也许效率高点,估计实现起来稍微有点复杂......

请问排序的目的是什么呢?
6楼2012-06-21 15:43:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

【答案】应助回帖

引用回帖:
6楼: Originally posted by sweet711 at 2012-06-21 15:43:10
请问排序的目的是什么呢?...

效率的因素的...排序之后的删除效率会提高的,太别是针对单个矩阵行太多的情况下
7楼2012-06-21 20:17:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sweet711

金虫 (小有名气)

我弄明白了,写个小循环就可以了

m123=intersect(matrix(:,1:2,1),matrix(:,1:2,2),'rows');
for t=3:n
     m123=intersect(m123,matrix(:,1:2,t),'rows');
end;
8楼2012-06-22 00:07:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 sweet711 的主题更新
信息提示
请填处理意见