0

次のようなタイムスタンプがあります。

Time =

  243.0000
  243.0069
  243.0139
  243.0208
  243.0278
  243.0347
  243.0417
  243.0486
  243.0556
  243.0625
  243.0694
  243.0764
  243.0833
  243.0903
  243.0972
  243.1042
  243.1111
  243.1181
  243.1250
  243.1319
  243.1389
  243.1458
  243.1528
  243.1597
  243.1667
  243.1736
  243.1806
  243.1875
  243.1944    

これで、別の 2 列のベクトルができました。

ab =

 243.0300    0.5814
 243.0717    0.6405
 243.1134    0.6000
 243.1550    0.5848
 243.1967    0.5869

最初の列は「Time2」で、2 番目の列は「Conc」です。

 Time2 = ab(:,1);
 Conc  = ab(:,2);

ここで、「Time2」に基づく「Conc」を「Time」と一致させたいのですが、「NaN」のみで埋めます。また、'Time2' は 'Time' とまったく同じではありません。次のようなものを使用できます

Conc_interpolated = interp1(Time2,Conc,Time)

しかし、人工データで補間を行います。補間されたデータではなく、「Conc」に「NaN」を入力してベクトルの長さを一致させたいだけです。推奨事項はありますか? ありがとう

4

2 に答える 2

3

私はあなたが望むものを推測しようとします:

時間ベクトル A があります。

TimeA = ...
 [243.0000;
  243.0069;
  ...
  243.1875;
  243.1944];

そしておそらくいくつかのデータA:

DataA = rand(length(TimeA),1);

次に、2 番目の時間ベクトル B を実装します。

TimeB = ...
 [243.0300;    
  243.0717;    
  243.1134;    
  243.1550;    
  243.1967]; 

およびそれに応じたデータ:

DataB = ...
 [0.5814;
  0.6405;
  0.6000;
  0.5848;
  0.5869];

最後に、すべてをマージしてソートする必要があります。

X = [ TimeA, DataA , NaN(size(DataA)) ; 
      TimeB, NaN(size(DataB)) , DataB ]

Y = sortrows(X,1);

結果:

Y =

  243.0000    0.8852       NaN
  243.0069    0.9133       NaN
  243.0139    0.7962       NaN
  243.0208    0.0987       NaN
  243.0278    0.2619       NaN
  243.0300       NaN    0.5814
  243.0347    0.3354       NaN
  243.0417    0.6797       NaN
  243.0486    0.1366       NaN
  243.0556    0.7212       NaN
  243.0625    0.1068       NaN
  243.0694    0.6538       NaN
  243.0717       NaN    0.6405
  243.0764    0.4942       NaN
  243.0833    0.7791       NaN
  243.0903    0.7150       NaN
  243.0972    0.9037       NaN
  243.1042    0.8909       NaN
  243.1111    0.3342       NaN
  243.1134       NaN    0.6000
  243.1181    0.6987       NaN
  243.1250    0.1978       NaN
  243.1319    0.0305       NaN
  243.1389    0.7441       NaN
  243.1458    0.5000       NaN
  243.1528    0.4799       NaN
  243.1550       NaN    0.5848
  243.1597    0.9047       NaN
  243.1667    0.6099       NaN
  243.1736    0.6177       NaN
  243.1806    0.8594       NaN
  243.1875    0.8055       NaN
  243.1944    0.5767       NaN
  243.1967       NaN    0.5869

そうですか?

于 2013-09-30T12:24:33.400 に答える
2

私の理解は少し異なります。追加するのではなく、それぞれに基づいて最も近いものにTime割り当てます。ConcTimeTime2

 ind = zeros(size(ab,1),1); %//preallocate memory
 for ii = 1:size(ab,1)
    [~, ind(ii)] = min(abs(ab(ii,1)-Time)); %//Based on this FEX entry: http://www.mathworks.com/matlabcentral/fileexchange/30029-findnearest-algorithm/content/findNearest.m
 end

 Time(:,2) = NaN; %// Prefill with NaN
 Time(ind, 2) = ab(:,2)

これにより、次の結果が得られます。

Time =

   243.00000         NaN
   243.00690         NaN
   243.01390         NaN
   243.02080         NaN
   243.02780     0.58140
   243.03470         NaN
   243.04170         NaN
   243.04860         NaN
   243.05560         NaN
   243.06250         NaN
   243.06940     0.64050
   243.07640         NaN
   243.08330         NaN
   243.09030         NaN
   243.09720         NaN
   243.10420         NaN
   243.11110     0.60000
   243.11810         NaN
   243.12500         NaN
   243.13190         NaN
   243.13890         NaN
   243.14580         NaN
   243.15280     0.58480
   243.15970         NaN
   243.16670         NaN
   243.17360         NaN
   243.18060         NaN
   243.18750         NaN
   243.19440     0.58690

あなたの入力例のために

于 2013-09-30T13:00:19.110 に答える