从MATLAB中的Matrix中的任意列中删除元素

时间:2016-09-29 06:52:34

标签: matlab

假设我在MATLAB中有一个矩阵。

>> m = [1 2 3; 4 5 6; 7 8 9]

m =

     1     2     3
     4     5     6
     7     8     9

我有一个索引列表,我希望从矩阵中删除这些索引中的元素。

索引可以属于任意行或列。但是,我可以保证,如果我要从行中删除一个元素,我必须从所有其他行中删除一个元素。

删除所有元素后,任何"间隙"在矩阵中应该通过向左移动元素来解决。

% for example, removing m(1, 1), m(2, 2), m(3, 3) should yield
m =

     2     3
     4     6
     7     8

% it will NOT yield the following because the elements were shifted up, not to the left.
M =

     4     2     3
     7     8     6

% removing only m(1, 1) would also be invalid, 
% because I must remove an element from all other rows.

对任意数量的索引执行此操作的最有效方法是什么?

1 个答案:

答案 0 :(得分:2)

当您需要向上移动元素时,解决方案是两步的。首先转置矩阵,删除相应的元素,然后重新整形并转置结果。 (如果允许向上移动,则不需要转置)。假设索引存储在矩阵remove中,那么:

m=[1,2,3;4,5,6;7,8,9];
remove=[1,1;2,2;3,3];
copy=m.';
width=size(copy,2);
copy(sub2ind(size(copy),remove(:,2),remove(:,1)))=[];
m=reshape(copy,[],width).'

我认为这解决了问题...