Matlab 如果所有元素都小于其他列,如何删除列

Matlab 如果所有元素都小于其他列,如何删除列,matlab,Matlab,我在使用Matlab时遇到了一个问题。 如果这些列中的所有元素少于其他列中的所有元素,如何删除一个或多个列 例如: A=[ 1 1 4 3; 0 -1 1 2; -1 1 6 4] 我想删除第1列和第2列,因为第1列和第2列中的所有元素都小于第3列和第4列中的元素,所以输出将是 B=[4 3; 1 2; 6 4] 如果我理解问题中所述的问题: 我们有一个矩阵a(比如大小mxn) 我们希望删除一组列,这样,如果我们取组中的任何列,其元素将小于

我在使用Matlab时遇到了一个问题。 如果这些列中的所有元素少于其他列中的所有元素,如何删除一个或多个列

例如:

A=[ 1  1  4  3; 
    0 -1  1  2; 
   -1  1  6  4]
我想删除第1列和第2列,因为第1列和第2列中的所有元素都小于第3列和第4列中的元素,所以输出将是

B=[4 3; 
   1 2; 
   6 4]

如果我理解问题中所述的问题:

  • 我们有一个矩阵
    a
    (比如大小
    mxn

  • 我们希望删除一组列,这样,如果我们取组中的任何列,其元素将小于矩阵
    a
    其余列中的相应系数

  • 换句话说,我们需要A的最大子矩阵,其中不存在元素都小于另一列中元素的列

让我们先用您的示例来尝试找到与此相同的问题:

A=[1 1 4 3;0 -1 1 2;-1 1 6 4];
现在让我们看一下,当您按照第二个维度降序排序矩阵并获取相应的索引时,会发生什么情况:

[~,I]=sort(A,2,'descend');

I =

 3     4     1     2
 4     3     1     2
 3     4     2     1   
我们可以看到两组独立的索引,即{3,4}和{1,2}。这正好告诉我们,第1列和第2列中的每个元素都比第3列和第4列中相应的元素小

现在我们只需要找到一种有效的方法来提取索引数组左侧最小的不相交索引组

这可以通过以下方式实现:

Ind1=I(:,1);

Ind2=I(:,2:end);



 while(any(ismember(Ind1,Ind2)))

 Ind1=[Ind1 Ind2(:,1)];

     if numel(Ind2)>=2

 Ind2=Ind2(:,2:end);

     else

 Ind2=[];

     end


 end

Indexes2keep=sort(Ind1(1,:));

ExtractedA=A(:,Indexes2keep);

如果我理解问题中所述的问题:

  • 我们有一个矩阵
    a
    (比如大小
    mxn

  • 我们希望删除一组列,这样,如果我们取组中的任何列,其元素将小于矩阵
    a
    其余列中的相应系数

  • 换句话说,我们需要A的最大子矩阵,其中不存在元素都小于另一列中元素的列

让我们先用您的示例来尝试找到与此相同的问题:

A=[1 1 4 3;0 -1 1 2;-1 1 6 4];
现在让我们看一下,当您按照第二个维度降序排序矩阵并获取相应的索引时,会发生什么情况:

[~,I]=sort(A,2,'descend');

I =

 3     4     1     2
 4     3     1     2
 3     4     2     1   
我们可以看到两组独立的索引,即{3,4}和{1,2}。这正好告诉我们,第1列和第2列中的每个元素都比第3列和第4列中相应的元素小

现在我们只需要找到一种有效的方法来提取索引数组左侧最小的不相交索引组

这可以通过以下方式实现:

Ind1=I(:,1);

Ind2=I(:,2:end);



 while(any(ismember(Ind1,Ind2)))

 Ind1=[Ind1 Ind2(:,1)];

     if numel(Ind2)>=2

 Ind2=Ind2(:,2:end);

     else

 Ind2=[];

     end


 end

Indexes2keep=sort(Ind1(1,:));

ExtractedA=A(:,Indexes2keep);

你试过什么吗?至少向我们展示在列上循环的代码……您的问题中有一些不清楚的地方。您如何确定前两列将被删除?我的意思是,它们有一个共同的元素,因此它们都没有通过测试,因为它们的元素比其他列元素小。例如(如第2列),如果a(1,2)是这些严格不等式吗?好像你没有
A(1,2)你试过什么吗?至少向我们展示在列上循环的代码……您的问题中有一些不清楚的地方。您如何确定前两列将被删除?我的意思是,它们有一个共同的元素,因此它们都没有通过测试,因为它们的元素比其他列元素小。例如(如第2列),如果a(1,2)是这些严格不等式吗?似乎您没有
A(1,2)谢谢您的回答,但是命令[~,I]=sort(A,2,'descent');对每行中的元素进行排序并更改列的顺序。这正是它所做的,只是我保留了索引矩阵
I
。当逐行耦合时,这些索引给出了一个分割矩阵的标准。请参见MATLAB的SortHanks的第二个输出,以获得答案,但命令[~,I]=sort(a,2,'descent');对每行中的元素进行排序并更改列的顺序。这正是它所做的,只是我保留了索引矩阵
I
。当逐行耦合时,这些索引给出了一个关于在何处分割矩阵的准则参见MATLAB排序的第二个输出