griddata#
- scipy.interpolate.griddata(точки, values, xi, метод='linear', fill_value=nan, масштабировать=False)[источник]#
Удобная функция для интерполяции неструктурированных данных в нескольких измерениях.
- Параметры:
- точки2-D ndarray чисел с плавающей точкой формы (n, D), или кортеж длины D из 1-D ndarray формы (n,).
Координаты точек данных.
- valuesndarray из float или complex, форма (n,)
Значения данных.
- xi2-D ndarray чисел с плавающей точкой формы (m, D) или кортеж длины D из ndarrays, транслируемых к той же форме.
Точки, в которых интерполируются данные.
- метод{‘linear’, ‘nearest’, ‘cubic’}, опционально
Метод интерполяции. Один из
nearestвозвращает значение в точке данных, ближайшей к точке интерполяции. См.
NearestNDInterpolatorдля более подробной информации.linearРазбить входное множество точек на N-мерные симплексы и выполнить линейную интерполяцию на каждом симплексе. См.
LinearNDInterpolatorдля получения дополнительной информации.cubic(1-D)вернуть значение, определенное из кубического сплайна.
cubic(2-D)возвращает значение, определённое кусочно-кубической, непрерывно дифференцируемой (C1) и приблизительно минимизирующей кривизну полиномиальной поверхности. См.
CloughTocher2DInterpolatorдля получения дополнительной информации.
- fill_valuefloat, опционально
Значение, используемое для заполнения запрошенных точек вне выпуклой оболочки входных точек. Если не указано, то по умолчанию
nan. Эта опция не влияет на метод 'nearest'.- масштабироватьbool, необязательно
Масштабировать точки до единичного куба перед выполнением интерполяции. Это полезно, если некоторые из входных измерений имеют несоизмеримые единицы и различаются на много порядков величины.
Добавлено в версии 0.14.0.
- Возвращает:
- ndarray
Массив интерполированных значений.
Смотрите также
LinearNDInterpolatorКусочно-линейный интерполятор в N измерениях.
NearestNDInterpolatorИнтерполятор ближайшего соседа в N измерениях.
CloughTocher2DInterpolatorКусочно-кубический, C1-гладкий, минимизирующий кривизну интерполятор в 2D.
interpnИнтерполяция на регулярной или прямоугольной сетке.
RegularGridInterpolatorИнтерполятор на регулярной или прямоугольной сетке в произвольных размерностях (
interpnоборачивает этот класс).
Примечания
Добавлено в версии 0.9.
Примечание
Для данных на регулярной сетке используйте
interpnвместо этого.Примеры
Предположим, мы хотим интерполировать 2-D функцию
>>> import numpy as np >>> def func(x, y): ... return x*(1-x)*np.cos(4*np.pi*x) * np.sin(4*np.pi*y**2)**2
на сетке в [0, 1]x[0, 1]
>>> grid_x, grid_y = np.mgrid[0:1:100j, 0:1:200j]
но мы знаем его значения только в 1000 точках данных:
>>> rng = np.random.default_rng() >>> points = rng.random((1000, 2)) >>> values = func(points[:,0], points[:,1])
Это можно сделать с помощью
griddata– ниже мы пробуем все методы интерполяции:>>> from scipy.interpolate import griddata >>> grid_z0 = griddata(points, values, (grid_x, grid_y), method='nearest') >>> grid_z1 = griddata(points, values, (grid_x, grid_y), method='linear') >>> grid_z2 = griddata(points, values, (grid_x, grid_y), method='cubic')
Можно видеть, что точный результат воспроизводится всеми методами в некоторой степени, но для этой гладкой функции кусочно-кубический интерполянт дает наилучшие результаты:
>>> import matplotlib.pyplot as plt >>> plt.subplot(221) >>> plt.imshow(func(grid_x, grid_y).T, extent=(0,1,0,1), origin='lower') >>> plt.plot(points[:,0], points[:,1], 'k.', ms=1) >>> plt.title('Original') >>> plt.subplot(222) >>> plt.imshow(grid_z0.T, extent=(0,1,0,1), origin='lower') >>> plt.title('Nearest') >>> plt.subplot(223) >>> plt.imshow(grid_z1.T, extent=(0,1,0,1), origin='lower') >>> plt.title('Linear') >>> plt.subplot(224) >>> plt.imshow(grid_z2.T, extent=(0,1,0,1), origin='lower') >>> plt.title('Cubic') >>> plt.gcf().set_size_inches(6, 6) >>> plt.show()