簡體   English   中英

在Scipy中使用PiecewisePolynomial插值數組列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM