在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
:我正在尝试实现本杰明尼-霍赫伯格过程,该过程基于排序后的每个向量元素进行调整,但在调整后恢复原始顺序对我很重要。