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)代码>