Другими словами, я получил набор точек данных (x, y, z), связанных со значением b, и я хотел бы интерполировать эти данные как можно точнее. Scipy.interpolate.griddata может выполнять только линейную интерполяцию, какие есть другие варианты?
Сплайн-интерполяция по 3 переменным для разбросанных данных в Python?
Ответы (1)
Как насчет интерполяции x, y, z отдельно? Я изменил этот пример и добавил к нему интерполяцию:
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()
Результат выглядит следующим образом:
ОБНОВЛЕНИЕ
Не понял вопроса с первого раза, извините.
Вероятно, вы ищете трикубическую интерполяцию. Попробуйте это.
person
koxy
schedule
27.07.2016
Спасибо за ваш ответ. Использование параметризации в моем случае не вариант, потому что я не знаю, какой будет параметризация...
- person Odile; 28.07.2016
Да, я думал, тебе нужно интерполировать линию. Смотрите обновленный ответ.
- person koxy; 28.07.2016
Трикубическая интерполяция предназначена для равноотстоящих координат, мои разбросаны. В любом случае, я использовал множество различных методов, и я думаю, что мой единственный вариант — выполнить линейную интерполяцию и, следовательно, использовать scipy.interpolate.griddata().
- person Odile; 29.07.2016