插值:给定温度下的光谱(波长、计数),以创建温度和计数网格

Interpolate: spectra (wavelength, counts) at a given temperature, to create grid of temperature and counts

我有许多光谱:wavelength/counts 在给定温度下。每个光谱的波长范围相同。

我想在温度和计数之间进行插值以创建一个大的光谱网格(温度和计数(在给定的波长范围内)。

下面的代码是我目前的进度。当我尝试获取给定温度的光谱时,当我需要代表光谱的一系列计数(我已经知道波长)时,我只得到一个计数值。

我想我对数组和插值感到困惑。我做错了什么?

import pandas as pd
import numpy as np
from scipy import interpolate

image_template_one = pd.read_excel("mr_image_one.xlsx")

counts = np.array(image_template_one['counts'])
temp = np.array(image_template_one['temp'])

inter = interpolate.interp1d(temp, counts, kind='linear')

temp_new = np.linspace(30,50,0.5)
counts_new = inter(temp_new)

我现在认为我有两个数组; [波长,计数] 和 [波长,温度]。这是否正确,我是否需要在数组之间进行插值?

示例数据

我想你想要实现的可以用 interp2d 来完成:

from scipy import interpolate

# dummy data
data = pd.DataFrame({
    'temp': [30]*6 + [40]*6 + [50]*6,
    'wave': 3 * [a for a in range(400,460,10)],
    'counts': np.random.uniform(.93,.95,18),
})

# make the interpolator
inter = interpolate.interp2d(data['temp'], data['wave'], data['counts'])

# scipy's interpolators return functions, 
# which you need to call with the values you want interpolated.    
new_x, new_y = np.linspace(30,50,100), np.linspace(400,450,100)

interpolated_values = inter(new_x, new_y)