Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 使用NaN元素的数组排序在其位置保持不变_Matlab_Sorting - Fatal编程技术网

Matlab 使用NaN元素的数组排序在其位置保持不变

Matlab 使用NaN元素的数组排序在其位置保持不变,matlab,sorting,Matlab,Sorting,我有一个数组,希望排序时NaN在它们所在的位置保持不变 例如: B=[5,2,NaN,NaN,9,34,23,NaN,89] 输出应为: B_sorted=[2,5,NaN,NaN,9,23,34,NaN,89]; 仅使用不同的比较方法进行排序是行不通的,即使您为每个x定义了比较(x,NaN)=0。我认为,合并排序和快速排序都将移动您的NaN 我认为您需要过滤非NaN值,对其进行排序,并覆盖非NaN索引 伪码 int j = 0; for(int i= 0; i <= B.size()

我有一个数组,希望排序时
NaN
在它们所在的位置保持不变


例如:

B=[5,2,NaN,NaN,9,34,23,NaN,89]

输出应为:

B_sorted=[2,5,NaN,NaN,9,23,34,NaN,89];

仅使用不同的比较方法进行排序是行不通的,即使您为每个x定义了比较(x,NaN)=0。我认为,合并排序和快速排序都将移动您的NaN

我认为您需要过滤非NaN值,对其进行排序,并覆盖非NaN索引

伪码

int j = 0;
for(int i= 0; i <= B.size(); ++i)
  if(B[i] != NaN)
     indices[j] = i
     values[j] = B[i]
     ++j

sort(values[0 .. j-1])

for(int k = 0; k < j; ++k)
  B[indices[k]]=values[k]
intj=0;

对于(inti=0;i如果您在Ruby中执行此操作

b=[5,2,'NaN','NaN',9,34,23,'NaN',89]

b_sort = (b - ['NaN']).sort
b = b.map{|x| x == 'NaN' ? 'NaN' : b_sort.shift}

简单的解决方案是在适当的地方进行,而不是触摸不可见的元素

B=[5,2,NaN,NaN,9,34,23,NaN,89];
B(~isnan(B)) = sort(B(~isnan(B)))
或使用新阵列:

B_sorted = nan(size(B));
B_sorted(~isnan(B)) = sort(B(~isnan(B)))

那个么?改变你们的排序方法,让它以特殊的方式处理NAN。什么编程语言?我在matlab中做