【发布时间】:2012-11-17 20:12:06
【问题描述】:
在 Matlab 中,sort 返回排序后的向量和一个索引向量,显示哪个向量元素被移动到哪里:
[v, ix] = sort(u);
这里,v 是一个包含u 的所有元素的向量,但已排序。 ix 是一个向量,表示v 的每个元素在u 中的原始位置。使用 Matlab 的语法,u(ix) == v。
我的问题:如何从v和ix获取u?
当然,我可以简单地使用:
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 过程,该过程根据矢量的位置调整矢量的每个元素排序后,但调整后恢复原始顺序对我来说很重要。
【问题讨论】:
标签: matlab sorting vectorization