我们应该如何在Matlab中有效地从矩阵中删除多个行和列? 向量包含应删除的索引。
输入:t by t matrix
输出:(t-k)乘以(t-k)矩阵,其中k个非相邻行和相应列从输入矩阵中移除。
答案 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.