所以这是我一段时间以来一直试图以一种很好的方式解决的问题。
基本上,我有一些数据(光谱,即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)。
我已经找到了解决类似问题的方法,但没有一个完全像这样。如果有人能指出正确的方向,我将不胜感激。
答案 0 :(得分:0)
我不是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