分散数据-缩放x轴以完成范围并内插剩余的y个数据点

时间:2019-02-22 09:08:59

标签: python

我有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]]

2 个答案:

答案 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]]