使用 Python 中的 griddata 在二维中插值 3D 数据



所以这是我一段时间以来一直在尝试以很好的方式解决的问题。

基本上,我有一些数据(光谱,即 1000 种不同波长的强度(,这些数据取决于两个参数 Z 和 A,尺寸分别为 25 和 300。因此,我的数据是一个尺寸为 1000x25x300 的数组。我有两个数组,包含 A 和 Z 的不同值。

我想做的是在我的数据范围内为任意值的 A 和 Z 找到一个插值频谱(即 1000 个具有强度的点(。

我觉得 scipy griddata 应该能够做到这一点,但我不太清楚正确的方法来做到这一点。

目前我有:

  • Z - 参数 Z 的 25 个测量值的数组
  • A
  • - 参数 A 的 300 个测量值的数组
  • Spec_data - 实际光谱,1000 x 25 x 300 的阵列
  • p_A - 我要插值到 的 A 值
  • p_Z - 我要插值到 的 Z 值

我想要什么:

  • out_spec - 用于p_A和p_Z的频谱(长度为1000(。

我已经找到了类似问题的解决方案,但没有一个完全像这样。如果有人能指出我正确的方向,我将不胜感激。

我不是 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

最新更新