Python 如何使用numpy在列表中的值对之间进行插值

Python 如何使用numpy在列表中的值对之间进行插值,python,numpy,Python,Numpy,我有如下清单: x_data = [3, 5, 7, 8, 5, 2] y_data = [15, 20, 22, 23, 21, 14] 我想在列表中的项目对之间进行插值,这样列表的长度不是6,而是n,列表中的每对项目之间具有相等的空间值。我目前的方法是使用列表理解来遍历列表和np中的成对项。用结果扩展一个空列表。是否有更好的现成功能来执行此操作 我目前的做法是: import numpy as np x_data = [3, 5, 7, 8, 5, 2] y_data = [15, 20

我有如下清单:

x_data = [3, 5, 7, 8, 5, 2]
y_data = [15, 20, 22, 23, 21, 14]
我想在列表中的项目对之间进行插值,这样列表的长度不是6,而是n,列表中的每对项目之间具有相等的空间值。我目前的方法是使用列表理解来遍历列表和
np中的成对项。用结果扩展一个空列表。是否有更好的现成功能来执行此操作

我目前的做法是:

import numpy as np

x_data = [3, 5, 7, 8, 5, 2]
y_data = [15, 20, 22, 23, 21, 14]
result_x = []
result_y = []
[result_x.extend(np.linspace(first, second, 5)) for first, second, in  zip(x_data, x_data[1:])]
[result_y.extend(np.linspace(first, second, 5)) for first, second, in  zip(y_data, y_data[1:])]
print(result_x, '\n'*2, result_y)

Out: [3.0, 3.5, 4.0, 4.5, 5.0, 5.0, 5.5, 6.0, 6.5, 7.0, 7.0, 7.25, 7.5, 7.75, 8.0, 8.0, 7.25, 6.5, 5.75, 5.0, 5.0, 4.25, 3.5, 2.75, 2.0] 



[15.0, 16.25, 17.5, 18.75, 20.0, 20.0, 20.5, 21.0, 21.5, 22.0, 22.0, 22.25, 22.5, 22.75, 23.0, 23.0, 22.5, 22.0, 21.5, 21.0, 21.0, 19.25, 17.5, 15.75, 14.0]

我认为这个函数可以满足您的需要:

例如:

x_data = [3, 5, 7, 8, 5, 2]
y_data = [15, 20, 22, 23, 21, 14]

print(interpolate_vector(x_data, 4))
# [3.   3.5  4.   4.5  5.   5.5  6.   6.5  7.   7.25 7.5  7.75 8.   7.25
#  6.5  5.75 5.   4.25 3.5  2.75 2.  ]
print(interpolate_vector(y_data, 4))
# [15.   16.25 17.5  18.75 20.   20.5  21.   21.5  22.   22.25 22.5  22.75
#  23.   22.5  22.   21.5  21.   19.25 17.5  15.75 14.  ]

Scipy有一个插值函数,可以轻松处理这种方法。您只需提供当前数据和插值数据将基于的新“x”值

from scipy import interpolate

x_data = [3, 5, 7, 8, 5, 2]
y_data = [15, 20, 22, 23, 21, 14]
t1 = np.linspace(0, 1, len(x_data))
t2 = np.linspace(0, 1, len(y_data))

n = 50
t_new = np.linspace(0, 1, n)

f = interpolate.interp1d(t1, x_data)
x_new = f(t_new)

f = interpolate.interp1d(t2, y_data)
y_new = f(t_new)

scipy.interpolate
中有一些函数可以工作。或者你想要的东西是严格意义上的numpy?scipy是蒙在鼓里的numpy发布的代码是不正确的<代码>y_数据
未被使用,而
结果
在未定义的情况下被使用。此外,列表理解没有分配给任何变量。请发布一个工作代码段,以便我们了解您的确切需求。您的代码的问题是在插值时重复了元素。(Out:[3.0,3.5,4.0,4.5,5.0,5.0,5.5,6.0,)以避免这样做
np.linspace(第一,第二,5)[:-1]
这将丢弃最后一个插值元素,从而避免重复。请注意,您必须通过手动添加来处理最后一个元素。不,不要这样做。假设您的范围不是单调的,因此在某个时候您可以有一个递减的范围。然后,您可能会在不同的位置重复值,执行
np.unique
然后将删除一些需要的值,这会给您调试代码带来困难。我不知道numpy下有插值函数。很高兴知道!
from scipy import interpolate

x_data = [3, 5, 7, 8, 5, 2]
y_data = [15, 20, 22, 23, 21, 14]
t1 = np.linspace(0, 1, len(x_data))
t2 = np.linspace(0, 1, len(y_data))

n = 50
t_new = np.linspace(0, 1, n)

f = interpolate.interp1d(t1, x_data)
x_new = f(t_new)

f = interpolate.interp1d(t2, y_data)
y_new = f(t_new)