2

私はMatlabに次のようなNx4セル配列を持っています:

id1 word11 word12 word13
....
id2 word21 word22 word32
....   
idN wordN1 wordN2 wordN3

ここで、4 つの列のそれぞれに文字列が保持され、2 番目の列(word11... wordN1)には重複する値を含めることができます。別のセル配列を取得したいのですが、2 列目に一意の行があります。そのため、前の例で ifword21が wordN1 と同じであった場合、結果の配列には次の 2 つの行のみが含まれます (重複のどの行が選択されてもかまいません)。

id1 word11 word12 word13    
....    
idN wordN1 wordN2 wordN3

試しunique(cellArray{2})てみましたが、一意の値を持つ 2 番目の列のみが返され、行全体が必要です。これどうやってするの?

ありがとう

4

1 に答える 1

3

次のようにする必要があると思います:

Z = {'a', 'b'; 'a', 'c'; 'a', 'c'; 'a', 'd'; 'a', 'b'};
[~, I1] = unique(Z(:, 2));
I1 = sort(I1);
Soln = Z(I1, :);

説明?のオプションの追加引数を使用してunique、2 番目の列の一意の要素のインデックスを取得します。次に、sortこのインデックスを使用して、 の元の順序を維持できるようにしZます。Z最後に、によってインデックス付けされた の行を取得しますI1

sortがソートするのではなく、元の順序を実際に保持するのは少し直感的ではないことに注意してください:-) 理由はI1、一意の要素の行インデックスが含まれているためです。このようにソートすると、最小から最大の順に行インデックスが返されるため、 の元の順序が維持されZます。

于 2012-09-25T01:52:33.540 に答える