从矩阵matlab

时间:2016-02-15 10:05:57

标签: matlab

我想从大矩阵中删除一些列和行。这些是列和具有全零值的行。 MATLAB中是否有任何功能可以为您快速完成?我的矩阵很稀疏。我这样做:

 % To remove all zero columns from A
 ind = find(sum(A,1)==0) ;
 A(:,ind) = [] ;

 % To remove all zeros rows from A
 ind = find(sum(A,2)==0) ;
 A(ind,:) = [] ;

为此我有一行代码会很好,因为我可能会反复执行此类任务。感谢

2 个答案:

答案 0 :(得分:7)

一行代码是:

A=A(any(X,2),any(X,1))

没有必要像你一样使用find,你可以直接使用逻辑向量进行索引。

答案 1 :(得分:2)

1维度:

我将首先展示一个基于另一个duplicate question的简单示例,要求仅删除包含零元素的

给出矩阵A=[1,2;0,0];

要删除0的行,您可以:

  • 对每行的绝对值求和(以避免负数和正数的和为零),从而为您提供行和的列向量。

  • 保持总和不为零的每一行的索引。

使用代码:

A=[1,2;0,0];
% sum each row of the matrix, then find rows with non-zero sum
idx_nonzerolines = sum(abs(A),2)>0 ;
% Create matrix B containing only the non-zero lines of A
B = A(idx_nonzerolines,:) ;

将输出:

>> idx_nonzerolines = sum(abs(A),2)>0
idx_nonzerolines =
     1
     0
>> B = A(idx_nonzerolines,:)
B =
     1     2

2尺寸:

相同的方法可用于2维:

A=[ 1,2,0,4;
    0,0,0,0;
    1,3,0,5];

idx2keep_columns = sum(abs(A),1)>0 ;
idx2keep_rows    = sum(abs(A),2)>0 ;

B = A(idx2keep_rows,idx2keep_columns) ;

输出:

>> B = A(idx2keep_rows,idx2keep_columns)
B =
     1     2     4
     1     3     5

感谢@Adriaan指出了极端情况;)