python - 用多列插入数据

标签 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])

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

最佳答案

此错误可能是由于 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(这太棒了!)。我是 UnivariateSpline 的忠实粉丝。

关于python - 用多列插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32739661/

相关文章:

python - 使用 pybind11 在 python 中打印 C++ 类

python - 在 Python 中将单个整数像素数组转换为 RGB 三元组

Python 3D 点插值

python - 如何在Python中插入数据?

python - 从 numpy 向量中返回小于 1 的最大值

python - python 中的 3D 外推(基本上,scipy.griddata 扩展为外推)

python - 如何将所有给定的变量转换为 float

python - 编写一个函数,使另一个函数返回 List 而不是函数

python - 如何在自定义 CDN 服务器上静态部署 pythonwheel 包?

python - 从文本文件创建字典 Python Numpy