在Matlab中从矩阵中删除行和列

时间:2013-03-14 23:14:07

标签: matlab matrix

我们应该如何在Matlab中有效地从矩阵中删除多个行和列? 向量包含应删除的索引。

输入:t by t matrix

输出:(t-k)乘以(t-k)矩阵,其中k个非相邻行和相应列从输入矩阵中移除。

1 个答案:

答案 0 :(得分:16)

这可以解决您的问题。

matrix=randi(100,[50 50]);
rows2remove=[2 4 46 50 1];
cols2remove=[1 2 5 8 49];
matrix(rows2remove,:)=[];
matrix(:,cols2remove)=[];

在第二个想法中,如果你有索引,那么首先使用函数ind2sub将这些索引转换为下标:

[rows2remove,cols2remove] = ind2sub(size(matrix),VecOfIndices);

现在,您将获得需要删除的元素的行索引和列索引。无法从矩阵中删除单个元素。所以我假设您需要删除整个列和行。这可以做到:

rows2remove=unique(rows2remove);
cols2remove=unique(cols2remove); 
matrix(rows2remove,:)=[];
matrix(:,cols2remove)=[];

如果要删除单个元素,请使用单元格数组或将这些元素替换为某些过时的值,例如9999.