声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1586|回复: 8

[编程技巧] 求助:如何选出矩阵中符合条件的列?

[复制链接]
发表于 2006-9-14 21:43 | 显示全部楼层 |阅读模式

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

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

x
A为一个22*100的随机矩阵,B为一个22*2的矩阵,矩阵B中的两列分别为列向量的下限和上限,要求从矩阵A中选出列向量,选出的列向量满足B的范围要求。试问这段程序该怎么编啊?
  请各位大侠不吝赐教,小生先在此谢过了!
回复
分享到:

使用道具 举报

发表于 2006-9-14 22:37 | 显示全部楼层
原帖由 miniducky 于 2006-9-14 21:43 发表
A为一个22*100的随机矩阵,B为一个22*2的矩阵,矩阵B中的两列分别为列向量的下限和上限,要求从矩阵A中选出列向量,选出的列向量满足B的范围要求。试问这段程序该怎么编啊?
  请各位大侠不吝赐教,小生先在此谢 ...



看不懂,举个具体例子吧
 楼主| 发表于 2006-9-15 08:56 | 显示全部楼层

问题重新描述

A=[A1;A2;...Ai;...A100],B=[B1;B2],A、B矩阵的行数均为22,现在要从A中选取一些满足条件的列,条件为B1<Ai<B2,列向量Ai中的每个值都要在B1、B2对应行所构成的范围内。这些满足条件的列向量构成C矩阵。
发表于 2006-9-15 10:04 | 显示全部楼层
原帖由 miniducky 于 2006-9-15 08:56 发表
A=,B=,A、B矩阵的行数均为22,现在要从A中选取一些满足条件的列,条件为B1<Ai<B2,列向量Ai中的每个值都要在B1、B2对应行所构成的范围内。这些满足条件的列向量构成C矩阵。



按照你说的,C能否构成一个矩阵也成问题,因为每行对应的列数不一定相同,除非C是Cell类型
发表于 2006-9-15 10:20 | 显示全部楼层
function bijiao(A,B)
for i=1:100                                % 100对应A的列数
    C1=A(:,i)>B(:,1);
    C2=A(:,i)<B(:,2);
    if sum(C1)+sum(C2)==44        % 44对应A的行数的二倍
        C(:,:)=A(:,i);
        save C C;
    end
end
发表于 2006-9-15 10:41 | 显示全部楼层
原帖由 miniducky 于 2006-9-15 08:56 发表
A=,B=,A、B矩阵的行数均为22,现在要从A中选取一些满足条件的列,条件为B1<Ai<B2,列向量Ai中的每个值都要在B1、B2对应行所构成的范围内。这些满足条件的列向量构成C矩阵。



写了一个简单的,你看是否你要的结果:

A = randn(5,10);
B = randn(5,2);
C = cell(5,1);
for i = 1:5
    ind = find(A(i,:) > B(i,1) & A(i,:) < B(i,2));
    C{i} = A(i,ind);
end
C

评分

1

查看全部评分

 楼主| 发表于 2006-9-15 12:57 | 显示全部楼层
我后来自己摸索着这样编的:
把B的两列分成两个列向量,分别为Bmin、Bmax
[m,n]=size(A);
L=(A>=REP(Bmin,[1,n])&(A<=REP(Bmax,[1,n])));     %L为比较过后得到的一个逻辑矩阵
H=H(all(a));                                                                     %用all函数选出符合条件的列
这样好像是可以的
发表于 2006-9-15 14:47 | 显示全部楼层
原帖由 miniducky 于 2006-9-14 21:43 发表
A为一个22*100的随机矩阵,B为一个22*2的矩阵,矩阵B中的两列分别为列向量的下限和上限,要求从矩阵A中选出列向量,选出的列向量满足B的范围要求。试问这段程序该怎么编啊?
  请各位大侠不吝赐教,小生先在此谢 ...


之前那个有点错误,改了下,应该符合你字面上的意思了。

function bijiao(A,B)
j=0;
for i=1:4
    C1=A(:,i)>B(:,1);
    C2=A(:,i)<B(:,2);
    if sum(C1)+sum(C2)==6
        j=j+1;
        C(:,j)=A(:,i);
    end
end
save C C


查看C就是你要的矩阵,要查看就load C

评分

1

查看全部评分

发表于 2006-9-15 15:42 | 显示全部楼层
学习下哦
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-25 07:21 , Processed in 0.051636 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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