Python 使用多列插入数据

Python 使用多列插入数据,python,numpy,interpolation,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中起作用 >>

我是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])

其中,值是我要插值的数据点数组。

问题在于您试图以错误的方式访问列表。使用[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]对于处理程序的“第二行”。

此错误可能是由于a的形状与您预期的不同而导致的。我得到:

>>> 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(这太棒了!)。我非常喜欢单变量样条线。

是的,我认为它是数组a的形状:[[0.01731451][0.0173326][0.01736895]]而不是[0.01731454,0.0173326,…]我想我需要从数组中解包元素。有什么想法吗?