0

我在 Matlab 中有以下数组:

-60528084   -60780607
-60497166   -60750204
-60466187   -60719738
-60435147   -60689209
-60404046   -60658618
-60372884   -60627965
-60341661   -60597249
-60310378   -60566472
-60279035   -60535633
-60247632   -60504732
-60216170   -60473770
-60184647   -60442747
-60153066   -60411663
-60121425   -60380518

我需要一个代码/函数来对这个数组进行排序,如下所示:

            -60780607
            -60750204
            -60719738
            -60689209
            -60658618
            -60627965
            -60597249
            -60566472
-60528084   -60535633
-60497166   -60504732
-60466187   -60473770
-60435147   -60442747
-60404046   -60411663
-60372884   -60380518
-60341661   
-60310378   
-60279035   
-60247632   
-60216170   
-60184647   
-60153066   
-60121425

这个 SORT 所做的是匹配非常相似的行值。值不一样,但几乎一样。

4

2 回答 2

2

您可以使用:

[ms,ix]=sort(m(:))

得到整个排序列表和矩阵 m 的线性索引。然后您可以使用ind2sub来获取排序索引的相关列:

[r c]=ind2sub(size(m),ix);

然后该排序向量的差异并设置接近阈值(例如10000),

proximity_threshold=1e4; %# change as needed
ind=(diff(ms)<proximity_threshold)

然后使用阈值条件重建您的答案:

n=0;
nn=0;
while n<numel(ix)
    n=n+1;
    nn=nn+1;
    try
        if ind(n) & c(n)~=c(n+1)
            a(nn,c(n))=ms(n);
            a(nn,c(n+1))=ms(n+1);
             n=n+1;

        else
            a(nn,c(n))=ms(n);

        end
    end
end


        a =
               0   -60780607
               0   -60750204
               0   -60719738
               0   -60689209
               0   -60658618
               0   -60627965
               0   -60597249
               0   -60566472
       -60528084   -60535633
       -60497166   -60504732
       -60466187   -60473770
       -60435147   -60442747
       -60404046   -60411663
       -60372884   -60380518
       -60341661           0
       -60310378           0
       -60279035           0
       -60247632           0
       -60216170           0
       -60184647           0
       -60153066           0
于 2013-03-27T01:00:49.430 回答
0

假设您只想找到最佳班次,您可以轻松做到以下几点:

  1. 从某个位置开始,计算它的“好”程度(例如平方非零邻居的平均值)记录偏移量
  2. 再移一个,看看是否更好。如果更好地记住这个转变。
  3. 如果可以进一步移动,请重复步骤 2。
于 2013-03-27T19:21:45.043 回答