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. さらに1つシフトして、それがより良いかどうかを確認します。代わりに、このシフトを覚えておくとよいでしょう。
  3. さらにシフトできる場合は、手順 2 を繰り返します。
于 2013-03-27T19:21:45.043 に答える