在相等的时间值上合并2个向量

时间:2018-05-31 11:01:08

标签: matlab indexing

我收集了两种类型的数据。一个是结构Outputs,包含3个字段:Outputs.timeOutputs.signals和一个不重要的字段。 Outputs.time是一个包含所有时间值(数据采样的地方)的列向量,Outputs.signals有15行,每行有一个信号的值和属性(所以总共有15个信号)。因此,Outputs.signals(i).valuesOutputs.time具有相同的行数。

现在我有另外一个包含4列的表:LabData.timeLabData.NdBoilerLabData.NdOutput和一个不重要的列。 Outputs.time包含所有计算机采样数据,LabData.time仅包含一些手动测量值。因此,Outputs.time大于LabData.time,但在某些时候(Outputs.time = LabData.time),Outputs.signals和其他列的值都有LabData

目标是将LabData.NdBoilerLabData.NdOutput的值放在Outputs.signals(16)Outputs.signals(17)中,以获取值已知的时间样本。对于其他值,Outputs.signals(16) = NaNOutputs.signals(17) = NaN。但我不知道该怎么做,你能帮助我吗?

示例:

Outputs.time = [1; 2; 3; 4; 5];
Outputs.signals(1).values = [1111; 2222; 3333; 4444; 5555]; %and so on for the other signals

LabData.time = [2; 4];
LabData.NdBoiler = [1.23; 1.32];
%% Now the final result should be
Outputs.signals(16).values = [NaN; 1.23; NaN; 1.32; NaN]

1 个答案:

答案 0 :(得分:1)

我们的想法是先创建NaN s的向量,然后使用ismember匹配时间点,以替换您所知道的值。

Outputs.signals(16).values = nan(1,length(Outputs.time)); %Vector of nans
Lia = ismember(Outputs.time,LabData.time); %Where does the times match?
Outputs.signals(16).values(Lia) = LabData.NdBoiler; %substitute