1

この (10 x 8) のようなマトリックスがあり、「可変行長」に再形成する必要がありますが、現在のマトリックスを最初に示す次のような同じ列数に変更する必要があります。

   NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN
   NaN       NaN       NaN       NaN    1.0000       NaN       NaN       NaN
   NaN       NaN       NaN       NaN    0.9856       NaN       NaN       NaN
   NaN       NaN       NaN    1.0000    0.9960       NaN       NaN       NaN
   NaN    1.0000       NaN    1.2324    0.9517       NaN       NaN       NaN
   NaN    1.0721       NaN    1.1523    0.8877       NaN       NaN    1.0000
   NaN    1.0617    1.0000    0.9677    1.0006       NaN       NaN    1.3116
1.0000    0.9944    0.9958    1.0712    1.0369    1.0000    1.0000    1.2027
0.9717    0.9995    0.9705    1.0691    0.8943    0.9724    0.8863    1.2083
1.0168    0.9908    0.9406    1.0460    0.8647    0.9483    0.9064    1.2035

そして、共通点== 1.0000から始まる不均一な列をプロットできるように、それをトリミングする必要があります。最終的な配列は次のようになり、新しい各列は 1.0000 で始まり、各 1.0000 のすぐ下の列に値が続きます。

1.0000   1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000
0.9717   1.0721 0.9958 1.2324 0.9856 0.9724 0.8863 1.3116
1.0168   1.0617 0.9705 1.1523 0.9960 0.9483 0.9064 1.2027
         0.9944 0.9406 0.9677 0.9517               1.2083
         0.9995        1.0712 0.8877               1.2035
         0.9908        1.0691 1.0006
                       1.0460 1.0369
                              0.8943
                              0.8647
4

3 に答える 3

2

値を列の最後に移動して、NaN列のサイズが異なるのを避けることができます。このようにして、プロット関数はうまく機能します。これを行う1つの方法は次のとおりです。

function C = relocateNaN(A)
C=zeros(size(A)); 
B=sum(isnan(A)); 
for k=1:size(A,2), 
    C(:,k) = [A(B(k)+1:end,k); A(1:B(k),k)]; 
end
end
于 2013-06-21T15:24:13.963 に答える
1

NaN を行列の下部にシフトできます。これを次のように呼びましたA

B   = NaN(size(A));
idx = ~isnan(A);
B(flipud(idx)) = A(idx);

% then simply plot
plot(B)
于 2013-06-21T15:31:08.487 に答える