2つ以上の同じ要素を持つ列を削除

30 次查看(过去 30 天)
NK
NK 2022-4-14
评论: NK 2022-4-15
2つ以上の同じ要素を持つ列を削除したいです。
unique関数を使うのでしょうか?
良い手法を教えていただけますと助かります。
before
1 2 3 4 5
2 3 4 4 6 -削除
7 5 5 5 2 -削除
0 9 7 8 1
after
1 2 3 4 5
0 9 7 8 1

采纳的回答

Atsushi Ueno
Atsushi Ueno 2022-4-14
before = [1 2 3 4 5; 2 3 4 4 6; 7 5 5 5 2; 0 9 7 8 1]
before = 4×5
1 2 3 4 5 2 3 4 4 6 7 5 5 5 2 0 9 7 8 1
after = before(all(diff(sort(before'))),:)
after = 2×5
1 2 3 4 5 0 9 7 8 1
all(diff(sort(before')))' % 【参考】ソート⇒差分⇒論理積で、重複の無い行を選択するビット列になる
ans = 4×1 logical array
1 0 0 1
  1 个评论
NK
NK 2022-4-15
シンプルでわかりやすい手法を教えていただきありがとうございました。お陰様で解決しました。

请先登录,再进行评论。

更多回答(1 个)

Akira Agata
Akira Agata 2022-4-14
arrayfun 使った別の方法:
% 配列の一例 (行・列数は任意)
A = [...
1 2 3 4 5;...
2 3 4 4 6;... % -> 削除
7 5 5 5 2;... % -> 削除
0 9 7 8 1];
% 各行のユニークな要素数
nElement = arrayfun(@(x) numel(unique(A(x,:))), 1:size(A,1));
% ユニークな要素数がAの列数と同じ行インデックスを作成
idx = nElement == size(A,2);
% 対象の行のみ残す
A = A(idx,:);
% 結果を表示
disp(A)
1 2 3 4 5 0 9 7 8 1
  1 个评论
NK
NK 2022-4-15
別手法もご提示いただきありがとうございました。こちらも今後の参考にさせていただきます。

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 データ型の識別 的更多信息

产品


版本

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!