[英]Interpolating array columns with PiecewisePolynomial in scipy
我正在尝试使用scipy的PiecewisePolynomial
插入numpy数组的每一列。 我知道这对于scipy的interp1d
是可行的,但是对于分段多项式插值,它似乎并不能以相同的方式工作。 我有以下代码:
import numpy as np
import scipy.interpolate as interpolate
x1=np.array([1,2,3,4])
y1=np.array([[2,3,1],[4,1,6],[1,2,7],[3,1,3]])
interp=interpolate.PiecewisePolynomial(x1,y1,axis=0)
x = np.array([1.2, 2.1, 3.3])
y = interp(x)
结果为y = np.array([2.6112, 4.087135, 1.78648])
。 似乎只考虑了y1
的第一列。 如何使该方法返回x
指定的点处y1
中每一列的插值?
所述scipy.interpolate.PiecewisePolynomial
inteprets的不同列y1
作为函数的导数将被内插,而interp1d
解释列作为不同的功能。
如果您没有可用的导数,则可能根本就根本不想使用PiecewisePolynomial
。 如果只想有一个更平滑的插值,则尝试使用interp1d
,例如, kind='quadratic'
关键字参数。 (请参阅interp1d
的文档)
现在您的功能看起来很有趣
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
x = linspace(0,5,200)
ax.plot(x, interp(x))
ax.plot(x1, y1[:,0], 'o')
如果尝试二次样条插值:
interp = scipy.interpolate.interp1d(x1, y1.T, kind='quadratic')
fig = plt.figure()
ax = fig.add_subplot(111)
x = linspace(1,4,200)
ip = interp(x)
ax.plot(x, ip[0], 'b')
ax.plot(x, ip[1], 'g')
ax.plot(x, ip[2], 'r')
ax.plot(x1, y1[:,0], 'bo')
ax.plot(x1, y1[:,1], 'go')
ax.plot(x1, y1[:,2], 'ro')
这可能更接近您想要的:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.