2

ある行列 M (画像) で削除される行のインデックスを表す値のベクトルがあります。このベクトルには列ごとに 1 行の値しかありません (つまり、画像が 128 x 500 の場合、私のベクトルには 500 個の値が含まれます)。

私はMATLABにかなり慣れていないので、マトリックスから単一のピクセル(行、列の値)を削除するより効率的な方法があるかどうかわからないので、ここに尋ねに来ました。

行を1つ減らして新しいマトリックスを作成し、値を削除したい行が見つかるまで各列をループし、列を1つ上に「シフト」してから次の列に移動して同じことを行うことを考えていました.

より良い方法はありますか?

ありがとう

4

1 に答える 1

4

はい、ループを回避するため、作成と実行が高速になるソリューションがあります。線形インデックスを利用し、空の値 ( [])を割り当てることでマトリックス エントリを削除できるという事実を利用します。

% Example data matrix:
M = [1     5     9    13    17
     2     6    10    14    18
     3     7    11    15    19
     4     8    12    16    20];
% Example vector of rows to be removed for each column:
vector = [2 3 4 1 3];

[r c] = size(M);
ind = sub2ind([r c],vector,1:c);
M(ind) = [];
M = reshape(M,r-1,c);

これにより、次の結果が得られます。

>> M =
     1     5     9    14    17
     3     6    10    15    18
     4     8    11    16    20
于 2013-10-13T21:47:11.930 に答える