gpt4 book ai didi

matlab - "Desort"向量(撤销排序)

转载 作者:太空宇宙 更新时间:2023-11-03 19:42:52 26 4
gpt4 key购买 nike

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

[v, ix] = sort(u);

此处,v 是一个向量,包含 u 的所有元素,但已排序。 ix 是一个向量,表示 v 的每个元素在 u 中的原始位置。使用 Matlab 的语法,u(ix) == v

我的问题:如何从vix获取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 过程,该过程调整矢量基于排序后的位置,但调整后恢复原始顺序对我来说很重要。

最佳答案

解决方法是:

w(ix) = v;

这是一个有效的 Matlab 操作,前提是 w 至少与 v 一样大,或者尚未声明。

例子:

>> u = [4 8 10 6 2];
>> [v, ix] = sort(u)

v = 2 4 6 8 10
ix = 5 1 4 2 3

>> u(ix)

ans = 2 4 6 8 10

>> w(ix) = v

w = 4 8 10 6 2

(为琐碎的问答道歉,但我在输入问题时意识到了解决方案,并认为它可能对某人有用。)

关于matlab - "Desort"向量(撤销排序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13407030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com