У меня есть векторы скорости для примера сетки, как показано ниже:
Данные доступны здесь .Однако данные сохраняются в формате столбца, как указано ниже:
Формат входных данных
x1, y1, ... (velocity vectors)
x1, y2, ... (velocity vectors)
x1, y3, ... (velocity vectors)
: : :
x4, y2, ... (velocity vectors)
x4, y3, ... (velocity vectors)
x4, y4, ... (velocity vectors)
Я пытаюсь применить 2D-интерполяцию с scipy
'с interpolate
функция.Мне нужно удвоить количество точек сетки, а также интерполировать и записать в выходной файл в том же формате столбца:
Желаемый формат вывода (после интерполяции):
x1_i, y1_i, ... (velocity vectors)
x1_i, y2_i, ... (velocity vectors)
x1_i, y3_i, ... (velocity vectors)
: : :
x8_i, y6_i, ... (velocity vectors)
x8_i, y7_i, ... (velocity vectors)
x8_i, y8_i, ... (velocity vectors)
MWE
import numpy as np
from scipy.interpolate import Rbf
from scipy import interpolate
_data_ = np.genfromtxt('./2d_interp.dat', skip_header=1, dtype = None, delimiter = '\t')
mesh_y = (np.max(np.diff(np.sort(_data_[:,0]))))
mesh_z = (np.max(np.diff(np.sort(_data_[:,1]))))
mesh_min = min(mesh_y, mesh_z)
x_max = np.max(_data_[:,0])
x_min = np.min(_data_[:,0])
y_max = np.max(_data_[:,1])
y_min = np.min(_data_[:,1])
interp_n_cells = max(abs(x_max - x_min)/mesh_min, abs(y_max - y_min)/mesh_min)
x_interp = np.linspace(x_min, x_max, 2 * interp_n_cells)
y_interp = np.linspace(y_min, y_max, 2 * interp_n_cells)
xx_interp, yy_interp = np.meshgrid(x_interp, y_interp)
interp_data = np.empty(shape=(len(x_interp * y_interp),6))
interp_data[:,0] = x_interp
interp_data[:,1] = y_interp
interp_data[:,2] = _data_[0,2]
for i in range(3,5):
f = interpolate.interp2d(_data_[:,0], _data_[:,1], _data_[:,i], kind='linear')
interp_data[:,i] = f(x_interp, y_interp)
Теперь, как я могу интерполировать 2D-данные с scipy.interpolate
в формате столбца, т.е. мне нужно удвоить количество точек, интерполировать и вывестиданные в том же формате, что и входной формат (приведенный выше).Как это можно сделать с scipy
?