Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 通过填充'使一个向量等于另一个向量;楠';无插值_Matlab_Interpolation_Data Analysis - Fatal编程技术网

Matlab 通过填充'使一个向量等于另一个向量;楠';无插值

Matlab 通过填充'使一个向量等于另一个向量;楠';无插值,matlab,interpolation,data-analysis,Matlab,Interpolation,Data Analysis,我有一个时间戳如下 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

我有一个时间戳如下

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    
现在我有另一个两列向量

ab =

 243.0300    0.5814
 243.0717    0.6405
 243.1134    0.6000
 243.1550    0.5848
 243.1967    0.5869
第一列是“Time2”,第二列是“Conc”

 Time2 = ab(:,1);
 Conc  = ab(:,2);
现在我想将基于“Time2”的“Conc”与“Time”匹配,但只填充“NaN”。此外,“时间2”与“时间”并不完全相同。我可以用下面的方法

Conc_interpolated = interp1(Time2,Conc,Time)

但它用人工数据进行插值。我只想通过在“Conc”中填充“NaN”而不是插值数据来匹配向量长度。有什么建议吗?谢谢

我试着猜你想要什么:

你有时间向量A:

TimeA = ...
 [243.0000;
  243.0069;
  ...
  243.1875;
  243.1944];
可能还有一些数据A:

DataA = rand(length(TimeA),1);
现在要实现第二个时间向量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

是吗?

我试着猜你想要什么:

你有时间向量A:

TimeA = ...
 [243.0000;
  243.0069;
  ...
  243.1875;
  243.1944];
可能还有一些数据A:

DataA = rand(length(TimeA),1);
现在要实现第二个时间向量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

是吗?

我的理解有点不同,它不会增加
时间,而是根据
时间2
将每个
Conc
分配到最近的
时间:

 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

对于您的示例输入

我的理解有点不同,它不会增加时间
,而是根据时间2
将每个
Conc
分配到最近的
时间

 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

对于您的示例输入,我不太明白。如果您的意思是创建一个NaN数组,那么您可以通过以下方式生成NaN数组:nanarray=NaN(大小(x));这里是x,但你的时间和ab根本不匹配??您能否为这些示例输入提供示例输出?因为听起来你希望它只有一列
NaN
s@Dan和Cosades;非常感谢。实际上你是对的,输出将是“NaN”,因为“时间”和“时间2”不匹配。但是我可以用一个时间来表示“Conc_interpolated”,其中“time”和“Time2”彼此最接近。例如上面“ab”的第一行“时间2”为243.0300,“浓度”为“0.5814”。仅考虑到这一点,现在在与“时间”相对的新向量中,“Conc”0.5814的值可以在“时间”中的243.0278处使用(因为此时“时间”和“时间2”彼此接近),其余数据为“NaN”。因此,您希望将每个“Conc”值分配给最接近相应“时间2”值的“时间”值,对吗?作为补充,你想把Nan分配给所有其他不匹配的“时间”值吗?@a.Donda,是的,谢谢,我不太明白。如果您的意思是创建一个NaN数组,那么您可以通过以下方式生成NaN数组:nanarray=NaN(大小(x));这里是x,但你的时间和ab根本不匹配??您能否为这些示例输入提供示例输出?因为听起来你希望它只有一列
NaN
s@Dan和Cosades;非常感谢。实际上你是对的,输出将是“NaN”,因为“时间”和“时间2”不匹配。但是我可以用一个时间来表示“Conc_interpolated”,其中“time”和“Time2”彼此最接近。例如上面“ab”的第一行“时间2”为243.0300,“浓度”为“0.5814”。仅考虑到这一点,现在在与“时间”相对的新向量中,“Conc”0.5814的值可以在“时间”中的243.0278处使用(因为此时“时间”和“时间2”彼此接近),其余数据为“NaN”。因此,您希望将每个“Conc”值分配给最接近相应“时间2”值的“时间”值,对吗?为了填写,你想让NaNs被分配到所有其他没有匹配项的“时间”值吗?@a.Donda,是的,谢谢很多感谢:-)Perfect很多感谢:-)Perfect@Dan,非常感谢你的回答,这完全是我需要的。如果“ab”是由几列而不是两列组成的矩阵,那么您能告诉我如何更改您上面提到的代码吗?只需将最后两行更改为
Time(:,2:size(ab,2))=NaN;时间(ind,2:end)=ab(:,2:end)@Dan,非常感谢你的回答,这是我完全需要的。如果“ab”是由几列而不是两列组成的矩阵,那么您能告诉我如何更改您上面提到的代码吗?只需将最后两行更改为
Time(:,2:size(ab,2))=NaN;时间(ind,2:end)=ab(:,2:end)