Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 MATLAB:使用插值替换缺失值(NaN)

我有一个单元格数组,每个单元格包含一个值序列作为行向量。序列包含NaN表示的一些缺失值。

我想使用某种插值方法替换所有NaN,如何在MATLAB中做到这一点?我也愿意就如何处理这些缺失的价值观提出其他建议。

请考虑以下示例数据以说明问题:

seq = {randn(1,10); randn(1,7); randn(1,8)}; for i=1:numel(seq) %# simulate some missing values ind = rand( size(seq{i}) ) < 0.2; seq{i}(ind) = nan; end 结果序列:

seq{1} ans = -0.50782 -0.32058 NaN -3.0292 -0.45701 1.2424 NaN 0.93373 NaN -0.029006 seq{2} ans = 0.18245 -1.5651 -0.084539 1.6039 0.098348 0.041374 -0.73417 seq{3} ans = NaN NaN 0.42639 -0.37281 -0.23645 2.0237 -2.2584 2.2294 编辑:

基于这些回答,我认为存在一个混乱:很明显我不是在处理随机数据,上面显示的代码只是数据结构的一个示例。

实际数据是某种形式的已处理信号。问题是在分析过程中,如果序列包含缺失值,那么我的解决方案将失败,因此需要过滤/插值(我已经考虑过使用每个序列的均值来填补空白,但我希望有更强大的功能)



回答:

好吧,如果要处理时间序列数据,则可以使用Matlab的内置插值功能。

这样的事情应该适合您的情况,但是您需要对其进行一些调整...即。如果您没有等间隔的采样,则需要修改times线。

nseq = cell(size(seq)) for i = 1:numel(seq) times = 1:length(seq{i}); mask = ~isnan(seq{i}); nseq{i} = seq{i}; nseq{i}(~mask) = interp1(times(mask), seq{i}(mask), times(~mask)); end 您需要使用interp1的选项,以找出最适合您的情况的选项。



更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 21:21


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.