3
セル配列内の重複エントリを削除する便利な機能はありますか?セル配列内の重複エントリを削除する方法(これらのエントリが2x2行列の場合)
何人かのグーグルが関数 'unique'を投げたが、配列のすべてのエントリが文字列の場合にのみ動作するように見える。私は2x2行列です。私はCELLFUN、CELL2MATとUNIQUEの組み合わせを使用しました
おかげ
セル配列内の重複エントリを削除する便利な機能はありますか?セル配列内の重複エントリを削除する方法(これらのエントリが2x2行列の場合)
何人かのグーグルが関数 'unique'を投げたが、配列のすべてのエントリが文字列の場合にのみ動作するように見える。私は2x2行列です。私はCELLFUN、CELL2MATとUNIQUEの組み合わせを使用しました
おかげ
。考え方は、各行列をベクトルに変換し、それらのセル配列を行列に変換して一意に適用することです。結果はNUM2CELLでセル配列に戻すことができます。
x = {[1 2; 3 4], [1 2; 3 4], [5 6; 7 8], [1 2; 3 4], [5 6; 7 8]}';
x1 = cellfun(@(y)y(:)', x, 'UniformOutput',0);
x2 = cell2mat(x1);
x3 = unique(x2,'rows');
x4 = num2cell(x3,2);
x5 = cellfun(@(y) reshape(y,2,2), x4, 'UniformOutput',0);
おそらくそれは少ないステップで行うことができます。
このコードは、すべてのセル配列要素が同じサイズである場合にのみ機能することを覚えておくことが重要です。
は、あなたはそれを行うことができたとしても、私はあるようなコードを残していない理由はいかなる理由が表示されない
assert(size(unique(cell2mat(cellfun(@size,x,'UniformOutput',0))),1) == 1,...
'Cell elements have different size')
でこの状態を確認することができます。このように理解することができます –
大変ありがとうございます。 –