假设我有一个 double 组:
arr = 120,121,118,119,117,123,120
还有一个值x
x = 120
我想得到这个值
newarr = 120,120,119,121,118,117,123
这是一个新数组,与 arr 的大小相同,但值是根据值 x 排序的,最接近的值排在第一位(不管它是升序还是降序)。
有什么想法吗?
最佳答案
一种方法-
[~,idx] = sort(abs(x-arr))
out = arr(idx)
输出-
out =
120 120 121 119 118 117 123
因为 191
& 121
与 x = 120
等距,输出值似乎与预期中列出的值不同问题的输出。在这种方法中,当 arr
中出现两个这样的等距值时,出现在开头的值也将放在输出数组的开头,因此元素的顺序得到了保持
或者它在输出数组中是 stable
。作为演示这种“稳定性”的示例,这是一个示例运行,其中修改了 arr
并保持 x
在 120
-
>> arr
arr =
120 121 118 119 117 123 121 119
>> out
out =
120 121 119 121 119 118 117 123
注意:如果你想对等距元素进行升序排列,你可以先对 arr
进行排序,然后再使用这种方法。
关于arrays - 获取相对于值 Matlab 排序的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29733233/