关于不同数据集的Matlab中的折叠/平均数据

时间:2014-12-10 16:53:43

标签: matlab time binning

我有两组数据,但这些数据集的大小不同。 测量发生时,每组包含测量本身(MeasA和MeasB,均为双倍)和时间点(TimeA和TimeB,datenum或julian日期)。

现在我想将较小的数据集与较大的数据集进行匹配,为此,我想要表示围绕数据分布的较大数据集的数据点。小集的时间点,最后做一些相关分析。

编辑: 小例子数据的样子:

MeasA = [2.7694 -1.3499 3.0349 0.7254 -0.0631];
TimeA = [0.2 0.4 0.7 0.8 1.3];

MeasB = [0.7147 -0.2050 -0.1241 1.4897 1.4090 1.4172 0.6715 -1.2075 0.7172 1.6302];
TimeB = [0.1 0.2 0.3 0.6 0.65 0.68 0.73 0.85 1.2 1.4];

现在我想要折叠MeasB和TimeB,以便我将测量的平均值接近TimeA中的时间点,所以例如TimeB应该如下所示:

TimeB = [mean([0.1 0.2]) mean([0.3 0.6]) mean([0.65 0.68 0.73]) mean([0.85]) mean([1.2 1.4])]
TimeB = [0.15 0.4 0.69 0.85 1.3]

然后像这样崩溃MeasB:

MeasB = [mean([0.7147 -0.2050]) mean([-0.1241 1.4897]) mean([1.4090 1.4172 0.6715]) mean([-1.2075]) mean([0.7172 1.6302])];
MeasB = [0.2549 0.6828 1.1659 -1.2075 1.1737]

1 个答案:

答案 0 :(得分:1)

函数interp1是你的朋友。

您可以使用以下方式为集合B获取一组新的衡量标准,而不是设置A

newMeasB = interp1( TimeB , MeasB , TimeA ) ;

前2个参数是您要重新插值的集合的原始时间和测量值,最后一个参数是您希望计算插值的新x轴(示例中的时间)。

这样你就不会在两组测量之间得到不同的时间,你可以逐点比较它们。

查看interp1的文档以获取更多解释以及有关插值或任何可能的推断的选项。


编辑: Matlab doc曾经对这个功能有很好的说明,但是我无法在线找到它,所以这里有: Matlab Interp1

因此,使用linear方法,如果值恰好在2个点之间进行插值,则函数将返回精确平均值。如果插值比一个点更接近于另一个点,则返回的值将按比例更接近最近点的值。

如果NaN未与TimeA完全重叠,则timeB可能会出现在两侧(返回向量的开头或结尾)。该功能不能"插值"因为没有锚点。但是,interp1的不同选项允许您"推断"在输入范围之外,或者指定另一个默认值而不是NaN。