我有XY散点数据,随机Xs为整数。我想要输出具有均匀X分布的数据并内插缺失的Y。
我将创建一个x范围的数组并将其填充。然后循环运行以将Y填充到新数组中,然后对剩余的Y进行插值。
对我来说,这似乎效率极低。有更好的方法吗? 我是python的新手,想知道numpy之类的模块是否内置了有效的解决方案?
为澄清起见:
排序后,我有一组这样的分散数据
[[1 , 0.1],
[3 , 0.2],
[5 , 0.4]]
并想要一个这样的数组
[[1 , 0.1],
[2 , 0.15],
[3 , 0.2],
[4 , 0.3],
[5 , 0.4]]
答案 0 :(得分:1)
您可以使用np.interp。
作为一个简单的例子:
import numpy as np
x = np.array([0,1,2,4])
y = np.array([0.1,0.2,0.3,0.6])
# do the linear interpolation
new_x = np.arange(0,5,1)
new_y = np.interp(new_x, x, y)
给出new_y
的
[0.1,0.2,0.3,0.45,0.6]
答案 1 :(得分:1)
numpy.interp正是您想要的。
它采用表格形式的函数(即一组(x,y))并计算任何新x的线性插值。
考虑以下可产生所需结果的代码:
import numpy as np
a = np.array([[1 , 0.1],
[3 , 0.2],
[5 , 0.4]])
# a requested range - we fill in missing integer values.
new_x = range(1,6)
# perform interpolation. Origina array is sliced by columns.
new_y = np.interp(new_x, a[:, 0], a[:, 1])
# target array is zipped together from interpolated x a y
np.array(list(zip(new_x, new_y))).tolist()
[[1.0, 0.1],
[2.0, 0.15000000000000002],
[3.0, 0.2],
[4.0, 0.30000000000000004],
[5.0, 0.4]]