2016-10-27 8 views
2

たとえば、ソートされたベクトル: [9 9 9 10 13 13 14 15] と、それぞれの要素の順序を指定したい(同じ要素を保持したい)。 つまり答えが欲しい: [1 1 1 2 3 3 4 5]ベクトル内の各要素をどのように並べるか

アイデアはありますか? ありがとう!

注:私の本当のベクトルは(約50,000の要素)はるかに大きいので、私は手動でそれを行うことはできません...

答えて

6

unique機能を使用することができます

cumsum([logical(1) diff(a)~=0]) 

ランタイム - データは、ここにcumsumとアプローチとdiffですテスト -

>> a = sort(randi([10,10000],[1,10000000]));% Input array 
>> tic,[~,~,idx] = unique(a);toc % @rahnema1's soln with unique 
Elapsed time is 0.883363 seconds. 
>> tic,cumsum([logical(1) diff(a)~=0]);toc 
Elapsed time is 0.074566 seconds. 
+0

それは働いた。ありがとう! – user135172

+0

'logical(1)'は 'true'よりも速いですか? –

+0

@ LuisMendo MATLABでブール値「1」を取得する方法を忘れてしまったので、恥ずべき瞬間でした。ナンシーでは、私たちは「真」を持っていて、それはここではうまくいきませんでした。最終的に私はそれを理解しましたが、その小さなものを編集するつもりはありませんでした。あまりNumPyが助けていない;) – Divakar

3

あなたは、入力のソートされた性質を利用し

a=[9 9 9 10 13 13 14 15 ] 
[~,~,idx] = unique(a)