のは、私は行列matlabの行列の各行で追加の重複要素を削除するにはどうすればよいですか?
A = [2 3 2 5 6 7 2;
1 2 5 4 5 6 7;
7 5 3 9 8 1 2];
どのように私は2
Sを削除し、最初の行に1 2
を維持し、2行目のみ1 5
を維持しますか?あるとしましょうか
のは、私は行列matlabの行列の各行で追加の重複要素を削除するにはどうすればよいですか?
A = [2 3 2 5 6 7 2;
1 2 5 4 5 6 7;
7 5 3 9 8 1 2];
どのように私は2
Sを削除し、最初の行に1 2
を維持し、2行目のみ1 5
を維持しますか?あるとしましょうか
を与えます値が行内に重複している場合は、次のようにすることができます。
012そこからis_duplicate =
0 0 1 0 0 0 1
0 0 0 0 1 0 0
0 0 0 0 0 0 0
、それはあなたが探しているものな結果によって決まります。あなたはNaN
またはいくつかの他の値に重複を設定することができ、またはあなたはNaN
にそれらを設定することもできますが、その行の最後にそれらをシフトし、次のようなものを使用して:
col_idx = cumsum(~is_duplicate, 2);
idx = bsxfun(@plus,(col_idx-1)*size(A,1), (1:size(A,1))');
A_new = nan(size(A));
A_new(idx(~is_duplicate)) = A(~is_duplicate);
A_new =
2 3 5 6 7 NaN NaN
1 2 5 4 6 7 NaN
7 5 3 9 8 1 2
ありがとうございます。これは私が望んでいたものです、 – Gaze
各行の長さが異なるため、結果は行列にはなりません。次のように行のセル配列がベクトルとしてあなたは結果を得ることができます。
B = mat2cell(A, ones(size(A,1),1)); %// convert matrix to cell array of its rows
B = cellfun(@(x) unique(x,'stable'), B, 'uniformoutput', 0); %// stably remove duplicates
あなたの例の行列について
A = [2 3 2 5 6 7 2;
1 2 5 4 5 6 7;
7 5 3 9 8 1 2];
これはあなたが知りたい場合は
B{1} =
2 3 5 6 7
B{2} =
1 2 5 4 6 7
B{3} =
7 5 3 9 8 1 2
ありがとうございます。これは素晴らしいコードですが、私は行ベクトルではなく行列として保つことを好みます。私はダンマンの答えを取る。素敵な一日を! – Gaze
@Gazeもちろん!私はあなたが望んでいたか分からなかった。良い一日を過ごしてください! –
各行の長さが異なるため、結果は行列にはなりません。どのような結果が欲しいですか?行ベクトルのセル配列? –