matlab - 如何给出向量中每个元素的顺序

标签 matlab performance vectorization

例如,我有排序后的向量: [9 9 9 10 13 13 14 15 ] 我想给每个元素它的顺序(并保留相同的元素)。 即我想要的答案是: [1 1 1 2 3 3 4 5]

有什么想法吗? 谢谢!

注意:我的真实向量要大得多(大约 50,000 个元素),因此我无法手动完成...

最佳答案

利用输入数据的排序性质,这是一种使用 cumsumdiff 的方法 -

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

运行时测试 -

>> 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.

关于matlab - 如何给出向量中每个元素的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40282195/

相关文章:

R data.table,访问赋值函数内的矩阵

java - 我应该尽量减少 "if"语句或 "for"循环的数量吗?

c++ - AVX 中的矩阵向​​量乘法并不按比例比 SSE 中快

postgresql - postgres 如何处理位数据类型?

matlab - 在 MATLAB 中获取最接近的数据点的索引到 Kmeans 聚类中的质心

c# - 比 Dictionary<Type, X> 更快的选择?

ajax - 在我的 ASP.NET MVC 应用程序中将 JSON 数据检索到 jqGrid 时,我应该使用 POST 还是 GET?

matlab - 删除错误图中的较低标记

matlab - 在一行中将两个值从一个 Matlab 函数传递给另一个

Matlab:如何找到满足特定要求的矩阵的行索引?