所以这是一个问题,我一直想以一种很好的方式解决这个问题。
基本上,我有一些数据(光谱,即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