在 Matlab 中,sort
返回排序后的向量和一个索引向量,显示哪个向量元素被移动到哪里:
[v, ix] = sort(u);
这里,v
是一个向量,包含 的所有元素u
,但已排序。是一个向量,表示inix
的每个元素的原始位置。使用 Matlab 的语法,.v
u
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
但我有一种舌尖上的感觉,即有一种更优雅、单一语句、矢量化的方式来做这件事。
如果您想知道为什么需要这样做而不是仅仅使用u
:我正在尝试实现 Benjamini-Hochberg 过程,该过程在排序后根据向量的位置调整向量的每个元素,但在调整后恢复原始顺序对于我。