【发布时间】:2011-04-07 10:28:09
【问题描述】:
我有一个元胞数组,每个元胞数组都包含一系列值作为行向量。序列包含一些由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
编辑:
根据回复,我认为存在混淆:显然我不是在处理随机数据,上面显示的代码只是数据结构的一个示例。
实际数据是某种形式的处理信号。问题是在分析过程中,如果序列包含缺失值,我的解决方案将失败,因此需要过滤/插值(我已经考虑使用每个序列的平均值来填补空白,但我希望有更强大的东西)
【问题讨论】:
-
在您的示例中,我认为您很难找到一种插入缺失值的方法。插值要求数据点之间存在某种关系。通常这可能是它们来自时间序列(所以一个很好的猜测是可以从附近的点推断出缺失的部分)。在您的示例数据中,您试图猜测仅基于其他硬币翻转的“硬币翻转”。如果您可以向我们提供有关您的具体示例的更多信息,我们可以提供更多帮助。
-
@JudoWill:我认为他只是用随机数据作为人们玩的例子。
标签: matlab interpolation nan missing-data