интерполировать трехмерные данные в двух измерениях с griddata в Python - PullRequest
0 голосов
/ 12 октября 2018

так что это проблема, которую я некоторое время пытался решить хорошим способом.

По сути, у меня есть некоторые данные (спектры, то есть интенсивности для 1000 различных длин волн), и они зависят от двухпараметры Z и A, с размерами 25 и 300. Таким образом, мои данные - это массив измерений 1000x25x300.И у меня есть два массива, содержащие разные значения для A и Z.

Что я хочу сделать, это найти интерполированный спектр (т.е. 1000 точек с интенсивностями) для произвольных значений A и Z в пределах диапазоновмои данные.

Я чувствую, что scipy griddata должен быть в состоянии сделать это, но я не могу найти правильный способ сделать это.

В настоящее время у меня есть:

  • Z - массив из 25 измерений параметра Z
  • A - массив из 300 измерений параметра A
  • Spec_data - фактические спектры, массив 1000 x 25x 300
  • p_A - значение A, которое я хочу интерполировать в
  • p_Z - значение Z, которое я хочу интерполировать в

What Iхочу:

  • out_spec - спектр (длиной 1000) для p_A и p_Z.

Я нашел решения для подобных проблем, но ничего точнокак это.Буду очень признателен, если кто-нибудь укажет мне правильное направление.

1 Ответ

0 голосов
/ 12 октября 2018

Я не уверен на 100%, если вы этого хотите, по крайней мере, этот пример работает.Я изменил размер Spec_data на (20, 5, 10) вместо (1000, 25, 300), потому что такой большой массив может занимать много времени для интерполяции.

A = np.linspace(1, 10, 10)
Z = np.linspace(1, 5, 5)
Spec_data = np.random.randint(0, 2, size=(20,len(Z),len(A)))
p_A = 1.5
p_Z = 1.5

import numpy as np
from scipy.interpolate import interp2d

AA, ZZ = np.meshgrid(A,Z)
Spec_data_pAZ = np.ones(shape=Spec_data_pAZ.shape[0]) * np.nan
for i in range(len(Spec_data_pAZ)):
    f = interp2d(AA, ZZ, Spec_data[i])
    Spec_data_pAZ[i] = f([p_A],[p_Z])

print(Spec_data[0])
print(Spec_data_pAZ[0])

>>> [[0 1 1 1 0 0 1 1 1 1]
 [0 0 1 0 1 0 0 0 0 0]
 [1 0 1 0 0 1 0 1 1 1]
 [1 0 1 1 0 1 0 1 1 1]
 [1 0 1 0 1 1 1 1 1 1]]
>>> 0.24999999999999994
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...