使数据适合不同的数组大小

时间:2016-06-03 13:12:36

标签: python numpy signal-processing data-manipulation

我有两组数据由两个测量仪器创建,每个仪器给出一个时间列和电压列,而两组数据表示相同的时间量(或非常接近),它们存储在不同大小的数组中因为采样时间不同。 我想得到scipy.stats.pearsonr系数,但要做到这一点,我需要两个数据集相同的大小。

如何将两组中较小的一组的大小缩放到两组中较大的一组的大小,以便用更多的数据点表示相同的数据?

编辑。

很抱歉,我本来应该提供一个数据示例,因为文件中有额外的数据,我认为这样做会让我的注意力远离我遇到麻烦的方面。

名为OOL_Drift.dat的文件包含我想知道的数据,如果它与TemperatureChannels.txt和Room_Temperature.txt中包含的温度读数相关联。 每个文件的第1列是时间。 OOL_Drift.dat上的第二列包含我想要比较的数据。 TemperatureChannels.txt中的第4,第8,第12,第16,第20列包含要比较的数据。

以下是文件 https://drive.google.com/folderview?id=0B_viQkcWo4Z2LUlyVG82eWpmUXM&usp=sharing

由于我有很多样本并且读数没有很快改变,我认为它应该有用。

感谢所有人提出的建议

2 个答案:

答案 0 :(得分:0)

但是,为了获得相同长度的数组,你可以做的是采用更短的数据并通过插值信息来扩展它。 您可以插入信号(双线性或甚至三线性以获得更好的值)并重新采样。

http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.interp.html

答案 1 :(得分:0)

如果没有最恰当的例子,这很难回答,但可能有效的一种方法是通过pandas来做。如果您有测量时间,可以使用日期时间索引创建两个DataFrame:

df1 = pd.DataFrame({"data":np.random.rand(6)}, index=pd.date_range("01:00:00","06:00:00", freq="H"))

                    data
2016-06-03 01:00:00 0.436862
2016-06-03 02:00:00 0.171859
2016-06-03 03:00:00 0.273939
2016-06-03 04:00:00 0.949059
2016-06-03 05:00:00 0.434267
2016-06-03 06:00:00 0.212041

df2 = pd.DataFrame({"data2":np.random.rand(3)}, index=pd.date_range("01:00:00","06:00:00", freq="2H"))

                    data2
2016-06-03 01:00:00 0.544233
2016-06-03 03:00:00 0.253989
2016-06-03 05:00:00 0.893227

然后,您可以简单地将两者连接到索引上,这将自动对齐同时发生的那些观察,同时填充"缺失"数组中的观察结果与NaN的观察结果较少:

df1["data2"] = df2.data2

                    data        data2   
2016-06-03 01:00:00 0.436862    0.544233    
2016-06-03 02:00:00 0.171859    NaN 
2016-06-03 03:00:00 0.273939    0.253989    
2016-06-03 04:00:00 0.949059    NaN 
2016-06-03 05:00:00 0.434267    0.893227    
2016-06-03 06:00:00 0.212041    NaN 

然后您可以在计算相关系数之前使用pandas相当广泛的interpolate方法填充这些NaN - 这可能是一个插值例程,对您的应用程序有意义