索引被排序的传染媒介从传染媒介的

时间:2015-04-21 07:29:39

标签: arrays matlab sorting matrix

我的问题更清楚一个例子。

给定一个任意向量,即[6 2 5],我想得到另一个向量,其元素是输入向量的排序索引:在这种情况下,[3 1 2]

是否有任何能够返回此功能的MATLAB函数?

谢谢!

2 个答案:

答案 0 :(得分:3)

使用sort的第二个参数

[~, tmp] = sort( myInput );
[~, myOutput] = sort( tmp );

关于运行时间:

n = 1000; 
x = unique(randi(100*n,1,n)); %// make sure all elements of x are different
tic; %// try this answer
[ii t]=sort(x);
[ii out1]=sort(t);
toc, 
tic;
out2 = sum(bsxfun(@ge, x, x.'));
toc

输出:

 Elapsed time is 0.000778 seconds.  %// this answer
 Elapsed time is 0.003835 seconds.  %// bsxfun approach

答案 1 :(得分:3)

如果输入向量x的所有元素都保证不同,则可以使用bsxfun:对x的每个元素,计算多少元素(包括它自身)等于或超过:

y = sum(triu(bsxfun(@ge, x(:).', x(:))), 1);

如果x的元素不一定不同,则需要一个额外的步骤,以确保只对以前和当前元素进行比较:

m = bsxfun(@ge, x(:).', x(:));
y = sum(m & ~tril(m,-1).', 1);