使用python中的griddata在二维中插入三维数据

问题描述 投票:0回答:1

所以这是一个问题,我一直想以一种很好的方式解决这个问题。

基本上,我有一些数据(光谱,即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)。

我找到了类似问题的解决方案,但没有完全像这样。如果有人能指出我正确的方向,我真的很感激。

python scipy
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.