В моем приложении данные данных отбираются на искаженной сетке, и я хотел бы переделать ее в неразрешенную сетку. Для того, чтобы проверить это, я написал эту программу с иллюстративных искажениями и простую функцию, как данные:Проблемы с 2D-интерполяцией в Scipy
from __future__ import division
import numpy as np
import scipy.interpolate as intp
import pylab as plt
# Defining some variables:
quadratic = -3/128
linear = 1/16
pn = np.poly1d([quadratic, linear,0])
pixels_x = 50
pixels_y = 30
frame = np.zeros((pixels_x,pixels_y))
x_width= np.concatenate((np.linspace(8,7.8,57) , np.linspace(7.8,8,pixels_y-57)))
def data(x,y):
z = y*(np.exp(-(x-5)**2/3) + np.exp(-(x)**2/5) + np.exp(-(x+5)**2))
return(z)
# Generating grid coordinates
yt = np.arange(380,380+pixels_y*4,4)
xt = np.linspace(-7.8,7.8,pixels_x)
X, Y = np.meshgrid(xt,yt)
Y=Y.T
X=X.T
Y_m = np.zeros((pixels_x,pixels_y))
X_m = np.zeros((pixels_x,pixels_y))
# generating distorted grid coordinates:
for i in range(pixels_y):
Y_m[:,i] = Y[:,i] - pn(xt)
X_m[:,i] = np.linspace(-x_width[i],x_width[i],pixels_x)
# Sample data:
for i in range(pixels_y):
for j in range(pixels_x):
frame[j,i] = data(X_m[j,i],Y_m[j,i])
Y_m = Y_m.flatten()
X_m = X_m.flatten()
frame = frame.flatten()
##
Y = Y.flatten()
X = X.flatten()
ipf = intp.interp2d(X_m,Y_m,frame)
interpolated_frame = ipf(xt,yt)
На данный момент, у меня есть на вопросы:
код работает, но я получаю следующее предупреждение:
Предупреждение: больше узлов не может быть добавлено, поскольку количество коэффициентов B-сплайна уже превышает количество точек данных m. Вероятно, вызывает: s или m слишком мало. (FP> s) кх, ку = 1,1 пх, пу = 54,31 м = 1500 Fp = 0,000006 s = 0,000000
Кроме того, появляются некоторые интерполяции артефакты, и я предполагаю, что они связаны между собой к предупреждению - Вы, ребята, знаете, что я делаю неправильно?
- Для моих реальных приложений, кадры должны быть около 500 * 100, но при этом, я получаю MemoryError - Есть ли что-то я могу сделать, чтобы помочь, что, помимо разделения кадра на несколько частей?
Спасибо!
Извините, это не поможет - mpl_toolkits.basemap.interp предназначен только для интерполяции одной прямолинейной сетки на другую. Это условие не удовлетворяет моей входной сетке. – Dzz
Ссылка мертва ... –