2016-06-15 9 views
0

私はのすべての行を3番目の列にある一意の値に基づいて取得しようとしていて、それらを並べ替えません。以下の例を参照してください。 私は保持する行のインデックスは、1,2,3,5,7行(その順序で) 私はunique([5 5 3 4],'stable')を使用して考えていた( '安定'オプションは、並べ替えなしでインデックス値の順序を維持するようだ) 、私が使用しているOctave 4.0は安定したオプションを持っていませんどのようにこれを回避することができますか?値をソートせずに行を取得せずにユニークな関数を使用

アレイの例:

C=[ 
1, 103.4025175681402, 103.4104224840438, 0.007904915903608867; 
2, 102.1231938014567, 102.1146017352405, 0.00859206621620956; 
3, 97.5338137548381, 97.53996181901071, 0.006148064172606382; 
4, 97.54468038366592, 97.53996181901071, 0.004718564655206592; 
5, 93.76199482417094, 93.77030145885571, 0.008306634684771552; 
6, 93.77539643924416, 93.77030145885571, 0.005094980388449244; 
7, 106.976493571217, 106.9837463671074, 0.007252795890309471] 

私は

D= 
[ 
1, 103.4025175681402, 103.4104224840438, 0.007904915903608867; 
2, 102.1231938014567, 102.1146017352405, 0.00859206621620956; 
3, 97.5338137548381, 97.53996181901071, 0.006148064172606382; 
5, 93.76199482417094, 93.77030145885571, 0.008306634684771552; 
7, 106.976493571217, 106.9837463671074, 0.007252795890309471]; 

Code: I used thanks Brocodile to gives me the index `1,2,4,6,7` I'm trying to get the index `1,2,3,5,7` 

C=[1, 103.4025175681402, 103.4104224840438, 0.007904915903608867; 
2, 102.1231938014567, 102.1146017352405, 0.00859206621620956; 
3, 97.5338137548381, 97.53996181901071, 0.006148064172606382; 
4, 97.54468038366592, 97.53996181901071, 0.004718564655206592; 
5, 93.76199482417094, 93.77030145885571, 0.008306634684771552; 
6, 93.77539643924416, 93.77030145885571, 0.005094980388449244; 
7, 106.976493571217, 106.9837463671074, 0.007252795890309471] 

[~,i,~] = unique(C(:,3)); 
D = C(sort(i),:); 

出力が取得しようとしている最後の配列:

1  103.40251756814  103.410422484044 0.00790491590360887 
2  102.123193801457  102.11460173524 0.00859206621620956 
4  97.5446803836659  97.5399618190107 0.00471856465520659 
6  93.7753964392442  93.7703014588557 0.00509498038844924 
7  106.976493571217  106.983746367107 0.00725279589030947 

が、これはあるだろう単なる一例であることに注意してください何百行もあります。 PS:私はあなたにも複数の変数に割り当てることによって、ユニークであるかの指標を得るためにuniqueを使用することができますUbuntuの64bit版に16.04 おかげ

答えて

1

をオクターブ4.0を使用しています。

[D,id,ic] = unique(C); 

idは、ここでは私たちに保存されているユニークな値の指標行うCDを与えます。 2番目の列で一意の値のみを確認する場合は、2番目の列をunique(C(:,2))でチェックすることができます。 ここで、Cのユニークな行のインデックス(2列目)を指定します。我々は[~,i,~] = unique(C(:,2), "first")でそれらを得ることができます。あなたの例では、これは私たちを与えるだろう:

i = 
     5 
     3 
     2 
     1 
     7 

今はちょうど正しい順序でインデックスを取得するためにsort(i)する必要があり、その後、Dに一意の行をコピーします。

D = C(i,:) 

かいつまん:あなたはこのような'stable'の不足を回避することができ :これを行う

[~,i,~] = unique(C(:,2), "first"); 
D = C(sort(i),:); 
+1

は私にインデックス '1,2,4,6,7'ない' 1,2,3,5,7' I'LLを与えますコードIで質問を更新しました使用された –

+1

私はmatlabを使用するだけですが、ドキュメントからは '[〜、i、〜] = unique(C(:、2)、" first ");'オクターブで固定していると思います。 – Brocodile

+0

ありがとうございました:-) –

関連する問題