相关疑难解决方法(0)

"Desort"向量(撤消排序)

在Matlab中,sort返回排序向量和索引向量,显示哪个向量元素已移动到:

[v, ix] = sort(u);
Run Code Online (Sandbox Code Playgroud)

这里v是一个包含所有元素u但已排序的向量.ix是表示各元素的原始位置的矢量vu.使用Matlab的语法,u(ix) == v.

我的问题:如何获得u来自vix

当然,我可以简单地使用:

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程序,它根据排序后的位置调整矢量的每个元素,但是在调整后恢复原始顺序对于我.

sorting matlab vectorization

5
推荐指数
1
解决办法
1494
查看次数

标签 统计

matlab ×1

sorting ×1

vectorization ×1