たとえば、ソートされたベクトル: [9 9 9 10 13 13 14 15] と、それぞれの要素の順序を指定したい(同じ要素を保持したい)。 つまり答えが欲しい: [1 1 1 2 3 3 4 5]ベクトル内の各要素をどのように並べるか
アイデアはありますか? ありがとう!
注:私の本当のベクトルは(約50,000の要素)はるかに大きいので、私は手動でそれを行うことはできません...
たとえば、ソートされたベクトル: [9 9 9 10 13 13 14 15] と、それぞれの要素の順序を指定したい(同じ要素を保持したい)。 つまり答えが欲しい: [1 1 1 2 3 3 4 5]ベクトル内の各要素をどのように並べるか
アイデアはありますか? ありがとう!
注:私の本当のベクトルは(約50,000の要素)はるかに大きいので、私は手動でそれを行うことはできません...
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.
あなたは、入力のソートされた性質を利用し
a=[9 9 9 10 13 13 14 15 ]
[~,~,idx] = unique(a)
それは働いた。ありがとう! – user135172
'logical(1)'は 'true'よりも速いですか? –
@ LuisMendo MATLABでブール値「1」を取得する方法を忘れてしまったので、恥ずべき瞬間でした。ナンシーでは、私たちは「真」を持っていて、それはここではうまくいきませんでした。最終的に私はそれを理解しましたが、その小さなものを編集するつもりはありませんでした。あまりNumPyが助けていない;) – Divakar