2016-07-26 10 views
0

Другими словами, я получил набор точек данных (x, y, z), связанных со значением b, и я хотел бы максимально точно интерполировать эти данные. Scipy.interpolate.griddata может выполнять только линейную интерполяцию, каковы другие параметры?Сплайн-интерполяция по 3 переменным для рассеянных данных в Python?

ответ

0

Как насчет интерполяции x, y, z отдельно? Я изменил this учебник пример и добавил интерполяцию к нему:

import matplotlib as mpl 
from mpl_toolkits.mplot3d import Axes3D 
import numpy as np 
import matplotlib.pyplot as plt 
from scipy.interpolate import InterpolatedUnivariateSpline 

mpl.rcParams['legend.fontsize'] = 10 

# let's take only 20 points for original data: 
n = 20 

fig = plt.figure() 
ax = fig.gca(projection='3d') 
theta = np.linspace(-4 * np.pi, 4 * np.pi, n) 
z = np.linspace(-2, 2, n) 
r = z**2 + 1 
x = r * np.sin(theta) 
y = r * np.cos(theta) 
ax.plot(x, y, z, label='rough curve') 

# this variable represents distance along the curve: 
t = np.arange(n) 

# now let's refine it to 100 points: 
t2 = np.linspace(t.min(), t.max(), 100) 

# interpolate vector components separately: 
x2 = InterpolatedUnivariateSpline(t, x)(t2) 
y2 = InterpolatedUnivariateSpline(t, y)(t2) 
z2 = InterpolatedUnivariateSpline(t, z)(t2) 

ax.plot(x2, y2, z2, label='interpolated curve') 

ax.legend() 
plt.show() 

Результат выглядит следующим образом: 3d line plot

UPDATE

Не понял вопрос в первый раз, извините.

Возможно, вы ищете трикубическую интерполяцию. Попробуйте this.

+0

Благодарим за ответ. Использование параметризации не является вариантом в моем случае, потому что я не знаю, что такое параметризация ... – Odile

+0

Да, я думал, вам нужно интерполировать строку. См. Обновленный ответ. – koxy

+0

Трикубическая интерполяция для равноотстоящих координат, мои рассеяны. Во всяком случае, я прошел множество разных методов, и я думаю, что мой единственный вариант - сделать линейную интерполяцию и, следовательно, использовать scipy.interpolate.griddata(). – Odile