Matlabの行列から複数の行と列を効率的に削除するにはどうすればよいですか? ベクトルは、削除する必要があるインデックスを保持します。
入力: t 行 t 列の行列
出力: (tk) x (tk) 行列で、k 個の隣接しない行と対応する列が入力行列から削除されます。
これで問題が解決するはずです。
matrix=randi(100,[50 50]);
rows2remove=[2 4 46 50 1];
cols2remove=[1 2 5 8 49];
matrix(rows2remove,:)=[];
matrix(:,cols2remove)=[];
2番目の考えでは、インデックスがある場合は、最初に次の関数を使用してそれらのインデックスを添え字に変換しますind2sub
。
[rows2remove,cols2remove] = ind2sub(size(matrix),VecOfIndices);
これで、削除する必要のある要素の行と列のインデックスを取得できます。個々の要素をマトリックスから削除することはできません。したがって、列と行全体を削除する必要があると想定しています。それは次のように行うことができます:
rows2remove=unique(rows2remove);
cols2remove=unique(cols2remove);
matrix(rows2remove,:)=[];
matrix(:,cols2remove)=[];
個々の要素を削除する場合は、セル配列を使用するか、それらの要素を9999などの廃止された値に置き換えます。