我使用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]
答案 0 :(得分:0)
如果我理解问题中陈述的问题:
我们有一个矩阵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);