use*_*172 2 performance matlab vectorization
例如,我有排序的向量:[9 9 9 10 13 13 14 15]我想给每个元素它的顺序(并保持相同的元素).即我希望答案是:[1 1 1 2 3 3 4 5]
有任何想法吗?谢谢!
注意:我的真实矢量要大得多(大约50,000个元素)所以我不能手动完成...
使用输入数据的排序特性,这里有一个方法cumsum和diff-
cumsum([logical(1) diff(a)~=0])
Run Code Online (Sandbox Code Playgroud)
运行时测试 -
>> 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.
Run Code Online (Sandbox Code Playgroud)