matlab中如何将含非0元素个数排名最多得几行删掉?

比如图片

img
去掉2、3两行

如果你是想手动删除,那么假设你的矩阵名是A,那么输入

A(3,:)=[];   
A(2,:)=[];

如果你是想自动删除,那么

A=[1,6,9,0,0,0,0;2,4,6,9,1,0,0;1,6,9,0,0,0,0;2,4,6,9,0,0,0];
[r,c]=size(A);
m=0;
for i = 1:r
t=0;
for j=1:c
if A(i,j)~=0
t = t + 1;
end
end
row(i)=t;
if t>m
m=t;
end
end
for i=r:-1:1
if row(i)==m
A(i,:)=[];
end
end





大于3都删除的版本


A=[1,6,9,0,0,0,0;2,4,6,9,1,0,0;1,6,9,0,0,0,0;2,4,6,9,0,0,0];
[r,c]=size(A);
m=3; %如果大于3
for i = 1:r
t=0;
for j=1:c
if A(i,j)~=0
t = t + 1;
end
end
row(i)=t;
end
for i=r:-1:1
if row(i)>m
A(i,:)=[];
end
end





 
A = [1 6 9 0 0 0 0 0
     2 4 5 6 0 0 0 0
     1 2 3 4 0 0 0 0
     1 0 0 0 0 0 0 0
     1 6 3 0 0 0 0 0
     1 2 3 5 0 0 0 0 ];
 n0 = sum(A ~= 0,2);     %  每一行的0元素个数
 [nmax,ind] = max(n0);   %  找到0元素最多的行,下标为ind
 B = A([1:ind-1 ind+1:end],:);  % 去除非0元素最多的行
 n0 = sum(B ~= 0,2); 
 [nmax2,ind] = max(n0);       %  找到0元素最多的行,下标为ind
 while nmax2 == nmax          % 循环去除非零元素与第一行同样多的行
      B = B([1:ind-1 ind+1:end],:);
      n0 = sum(B ~= 0,2); 
      [nmax2,ind] = max(n0);   %  找到0元素最多的行,下标为ind
 end
 B  % 显示结果

结果:

B =
     1     6     9     0     0     0     0     0
     1     0     0     0     0     0     0     0
     1     6     3     0     0     0     0     0
A=[1,6,9,0,0,0,0,0,0;
   2,4,6,9,0,0,0,0,0;
   2,5,7,9,0,0,0,0,0;
   2,5,8,0,0,0,0,0,0;
   3,7,9,0,0,0,0,0,0;
   3,8,0,0,0,0,0,0,0];

B1=A(sum(A~=0,2)~=max(sum(A~=0,2)),:) %去除排名最多后矩阵

B2=A(sum(A~=0,2)<=3,:) %去除>3后矩阵