You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于相等时间值合并向量:将LabData整合至Outputs结构体

解决方法:精确匹配时间点填充数据

要实现将LabData的手动采集数据对应填充到Outputs的新信号中,核心是找到两类数据中完全匹配的时间点,然后在对应位置赋值,其余位置保留NaN。以下是具体实现步骤和代码:

步骤1:匹配时间点索引

首先用ismember函数找到LabData.time在Outputs.time中的对应位置,这个函数会返回两个关键结果:

  • isMatch:布尔向量,标记LabData中每个时间点是否在Outputs.time中存在
  • idx:向量,存储LabData.time每个元素在Outputs.time中的索引位置
[isMatch, idx] = ismember(LabData.time, Outputs.time);

步骤2:初始化并填充新信号

接下来为Outputs.signals新增第16和17个元素,先将它们的values字段初始化为和Outputs.time长度一致的NaN数组,再把LabData中对应时间点的数据填充到匹配的索引位置:

% 处理第16个信号:对应LabData.NdBoiler
Outputs.signals(16).values = nan(size(Outputs.time));
% 仅填充存在匹配的时间点数据
Outputs.signals(16).values(idx(isMatch)) = LabData.NdBoiler(isMatch);

% 处理第17个信号:对应LabData.NdOutput
Outputs.signals(17).values = nan(size(Outputs.time));
Outputs.signals(17).values(idx(isMatch)) = LabData.NdOutput(isMatch);

可选:添加不匹配时间点的提示

如果LabData中有部分时间点在Outputs.time中找不到,你可以添加警告提示,方便排查数据问题:

if ~all(isMatch)
    warning('以下手动采集的时间点在自动采样数据中未找到:%s', num2str(LabData.time(~isMatch)'));
end

验证示例

用你提供的测试数据验证:

% 测试输入
Outputs.time = [1; 2; 3; 4; 5];
Outputs.signals(1).values = [1111; 2222; 3333; 4444; 5555];
LabData.time = [2; 4];
LabData.NdBoiler = [1.23; 1.32];

% 运行上述代码后
disp(Outputs.signals(16).values);
% 输出结果:
%    NaN
%   1.23
%    NaN
%   1.32
%    NaN

完全符合你的需求!

内容的提问来源于stack exchange,提问作者user2501247

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:40:59