在Matlab中,sort返回排序向量和索引向量,显示哪个向量元素已移动到:
[v, ix] = sort(u);
Run Code Online (Sandbox Code Playgroud)
这里v是一个包含所有元素u但已排序的向量.ix是表示各元素的原始位置的矢量v在u.使用Matlab的语法,u(ix) == v.
我的问题:如何获得u来自v和ix?
当然,我可以简单地使用:
w = zero(size(v));
for i = 1:length(v)
w(ix(i)) = v(i)
end
if nnz(w == u) == length(u)
print('Success!');
else
print('Failed!');
end
Run Code Online (Sandbox Code Playgroud)
但我有这种尖端的感觉,有一种更优雅,单一陈述,矢量化的方式来做到这一点.
如果你想知道为什么需要这样做而不仅仅是使用u:我试图实现Benjamini-Hochberg程序,它根据排序后的位置调整矢量的每个元素,但是在调整后恢复原始顺序对于我.