我的问题更清楚一个例子。
给定一个任意向量,即[6 2 5]
,我想得到另一个向量,其元素是输入向量的排序索引:在这种情况下,[3 1 2]
。
是否有任何能够返回此功能的MATLAB函数?
谢谢!
答案 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);