miniducky 发表于 2006-9-14 21:43

求助:如何选出矩阵中符合条件的列?

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

eight 发表于 2006-9-14 22:37

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


看不懂,举个具体例子吧

miniducky 发表于 2006-9-15 08:56

问题重新描述

A=,B=,A、B矩阵的行数均为22,现在要从A中选取一些满足条件的列,条件为B1<Ai<B2,列向量Ai中的每个值都要在B1、B2对应行所构成的范围内。这些满足条件的列向量构成C矩阵。

eight 发表于 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类型

bifely 发表于 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

eight 发表于 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

miniducky 发表于 2006-9-15 12:57

我后来自己摸索着这样编的:
把B的两列分成两个列向量,分别为Bmin、Bmax
=size(A);
L=(A>=REP(Bmin,)&(A<=REP(Bmax,)));   %L为比较过后得到的一个逻辑矩阵
H=H(all(a));                                                                     %用all函数选出符合条件的列
这样好像是可以的

bifely 发表于 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

zhangchuan 发表于 2006-9-15 15:42

学习下哦
页: [1]
查看完整版本: 求助:如何选出矩阵中符合条件的列?