Я пользователь MATLAB и пытаюсь перевести некоторый код на Python как задание. Поскольку я заметил некоторые различия между этими двумя языками в результатах трехмерной интерполяции из моего исходного кода, я пытаюсь решить эту проблему, проанализировав простой пример.
Я установил матрицу 2x2x2 (названную ниже blocc) с некоторыми значениями и ее координатами в трех векторах (X, Y, Z). Учитывая заданную точку запроса, я использую 3D-линейную интерполяцию, чтобы найти интегрированное значение. Опять же, я получаю разные результаты в MATLAB и Python (код ниже).
Python
import numpy as np
import scipy.interpolate as si
X,Y,Z =(np.array([1, 2]),np.array([1, 2]),np.array([1, 2]))
a = np.ones((2,2,1))
b = np.ones((2,2,1))*2
blocc = np.concatenate((a,b),axis=2) # Matrix with values
blocc[1,0,0]=7
blocc[0,1,1]=7
qp = np.array([2,1.5,1.5]) #My query point
value=si.interpn((X,Y,Z),blocc,qp,'linear')
print(value)
Здесь я получаю значение = 3
1010 * MATLAB *
blocc = zeros(2,2,2);
blocc(:,:,1) = ones(2,2);
blocc(:,:,2) = ones(2,2)*2;
blocc(2,1,1)=7;
blocc(1,2,2)=7;
X=[1,2];
Y=[1,2];
Z=[1,2];
qp = [2 1.5 1.5];
value=interp3(X,Y,Z,blocc,qp(1),qp(2),qp(3),'linear')
А вот значение = 2,75
Я не могу понять, почему: я думаю, что есть кое-что, чего я не понимаю, как работает интерполяция и / или матричная индексация в Python. Не могли бы вы дать мне понять? Спасибо!