使用多列插值数据

时间:2015-09-23 12:29:34

标签: python numpy interpolation

我是Python新手。我试图从数据集中插入数据值,如下所示: a = [45.0,0.0017317314,-0.00274,...] [45.07,0.00173326,-0.002278,...] 。 。

我想在第一列中的某些数据值中找到第二列到最后一列的数据值。

我尝试过以下代码:

interp_data = np.interp(45.01,a[:,0],a[:,1])

作为初始尝试找到一列的一个数据点的值。但是,它会返回错误'对象太深而无法使用所需数组'

但是,以下内容适用于shell

>>> xp = [45.0, 45.074969417037, 45.224757625296, 45.523726383073]

>>> fp = [1.73145123922036E-002, 1.73326024230735E-002, 1.73689532454203E-002, 1.74423417607930E-002]

>>> import numpy

>>> numpy.interp(45.1, xp, fp)

0.017338676881704793

另外,我想为多个值执行此操作:

for i in range(len(a)):

 for j in range(a.shape[1]):
   interp_data = np.interp(values,a[:,j],a[:,j])

其中values是我想要插入的数据点的数组。

2 个答案:

答案 0 :(得分:0)

问题是您尝试以不正确的方式访问列表。使用[1] [:](例如)访问列表。有了这个,你将获得列表第二个元素的所有值。 例如,您可以这样做:

xp = [0,1,2,3,4]
fp = [[2,3,4,5,6],[3,4,5,6,7],[4,5,6,7,8]]
np.interp(1.5,xp,fp[0])
3.5
np.interp(1.5,xp,fp[1])
4.5
np.interp(1.5,xp,fp[2])
5.5

因此,如果您希望将所有Y数据放在列表中,您只需要访问列表的第一个元素,然后访问第一个列表元素中包含的数据,就像访问第一行中的第一行一样。一个数组,你得到了所有列中包含的所有数据,区别在于你不需要为处理程序的“第二行”指定(1,:)仅[1]。

答案 1 :(得分:0)

此错误可能是由于形状与您预期的不同而造成的。我明白了:

>>> a = np.zeros((10,2))
>>> print np.interp(0,a[:,0],a[:,1])
0.0

>>> a = np.zeros((10,2,3))   #note incorrect shape
>>> print np.interp(0,a[:,0],a[:,1])
ValueError: object too deep for desired array

一旦你得到一个整理的形状,你就可以做到

points = #the 1D array of data points you want to interpolate to
interp_data = np.interp(points,a[:,0],a[:,1])

另请注意,np.interp仅为您提供线性插值。对于更复杂的插值,您需要使用scipy.interpolate(非常棒!)。我是UnivariateSpline的忠实粉丝。