Учитывая (не как код Python, поскольку второе задание будет стерта первым в каждом конкретном случае, конечно ;-):
y = 10
x = [1,2,3,4,5,6]
z = [2.3,3.4,5.6,7.8,9.6,11.2]
y = 20
x = [1,2,3,4,5,6]
z = [4.3,5.4,7.6,9.8,11.6,13.2]
вы спрашиваете: «Как я могу найти значение г когда у = 15 х = 3,5 "?
Поскольку вы просматриваете точку, точно эквидистантную как в x, так и y из заданной «сетки», вы просто берете среднюю точку между значениями сетки (если у вас есть значения, не эквидистантные, вы должны взять пропорциональную середину , увидим позже). Таким образом, для y = 10 значения z для x 3 и 4 равны 5.6 и 7.8, поэтому для x 3.5 вы оцениваете их среднюю точку, 6.7; и аналогично для y = 20 вы оцениваете середину между 7.6 и 9.8, т. е. 8.7. Наконец, поскольку у вас есть y = 15, средняя точка между 6.7 и 8.7 является вашим окончательным интерполированным значением для z: 7.7.
Скажем, у вас были y = 13 и x = 3.8. Тогда для х вы бы принимать значения 80% пути, то есть:
при у = 10, 0,2 * 5,6 + 0,8 * 7,8 -> 7,36
при у = 20, 0,2 * 7,6 + 0,8 * 9,8 -> 9,46
Теперь вы хотите г 30% пути между ними, 0,3 * 7,36 + 0,7 * 9,46 -> 8,83, это г.
Это линейная интерполяция, и это действительно очень просто. Вы хотите вычислить его вручную или найти подпрограммы, которые делают это за вас (например, numpy
массивы как «сетки»)? Даже в последнем случае я надеюсь, что это «ручное» объяснение (показывающее, что вы делаете в самых элементарных арифметических терминах) может помочь вам понять, что вы делаете ... ;-).
Есть более продвинутые формы интерполяции, конечно, вам нужны эти или линейная интерполяция достаточна для вашего случая использования?
Эй, спасибо. Я думаю, что это отлично работает Еще один вопрос: как я могу построить их в осях XY z – VASUDEVAN
Обратите внимание, что сплайны scipy.interpolate. * (FITPACK) могут не интерполировать, то есть не могут проходить входные данные; см. параметр гладкости s. Imho FITPACK имеет больше мощности, чем doc, поэтому начните просто (Martelli): kx = ky = 1, s = 0. – denis