Matlab 如何对极小值数组中的重要数据进行排序?

Matlab 如何对极小值数组中的重要数据进行排序?,matlab,Matlab,我有一个局部极小值向量,这些值大部分是噪声,只有很少的有效值。假设我的向量有三个有效值,并且都小于零。显著值和噪声之间存在巨大差异。每个有效值的大小也不同。我想根据这些重要值的索引按升序对它们进行排序。比如说 y = [-0.0002, -0.00058, -0.28, -0.0008, -0.25,-0.0006,-0.00004,-0.26] output = [-0.28, -0.25, -0.26, -0.0002, -0.00058,-0.0008, -0.0006,-0.00004]

我有一个局部极小值向量,这些值大部分是噪声,只有很少的有效值。假设我的向量有三个有效值,并且都小于零。显著值和噪声之间存在巨大差异。每个有效值的大小也不同。我想根据这些重要值的索引按升序对它们进行排序。比如说

y = [-0.0002, -0.00058, -0.28, -0.0008, -0.25,-0.0006,-0.00004,-0.26]
output = [-0.28, -0.25, -0.26, -0.0002, -0.00058,-0.0008, -0.0006,-0.00004]

不知何故,我希望保留峰值索引的顺序。

因此,对于您来说,y中的顺序比1/99的差更重要(您可以将1/99调整为您喜欢的任何值)

在排序之前,我将向量[1/99,2/99,3/99,4/99…]添加到y。然后我只保留修改后的y的排序方式。我将其应用于未修改的y

如果y很长的话就不行了。为此,您可能想再次重复我的建议:

[~,order]=sort(y+(1:length(y))/99)
y=y(order)
[~,order]=sort(y+(1:length(y))/99)
output=y(order)

请解释一下。我无法理解y+(1:length(y))/99的用途。我的数组中有3000个元素,您建议的方法不起作用。即使是长版本?您也可以尝试[~,order]=sort(round(y*100)/100+(1:length(y))*1e-7)
[~,order]=sort(y+(1:length(y))/99)
y=y(order)
[~,order]=sort(y+(1:length(y))/99)
output=y(order)