我有一個數組,並希望排序與NaN
完好無損的地方。排序與NaN元素的陣列保持完好無損在其位置
爲如:
B=[5,2,NaN,NaN,9,34,23,NaN,89];
輸出應該是:
B_sorted=[2,5,NaN,NaN,9,23,34,NaN,89];
我有一個數組,並希望排序與NaN
完好無損的地方。排序與NaN元素的陣列保持完好無損在其位置
爲如:
B=[5,2,NaN,NaN,9,34,23,NaN,89];
輸出應該是:
B_sorted=[2,5,NaN,NaN,9,23,34,NaN,89];
簡單的辦法就是做就地和別碰爲NaN
元素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)))
只是用不同的比較方法是行不通的排序,即使你定義比較(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]
不知道這是matlab ... – greyfairer
如果你在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}
那麼,改變你的排序方法,以特殊的方式處理NaN。 – athabaska
什麼編程語言? – zch
我正在做matlab – user2811031