插值:给定温度下的光谱(波长、计数),以创建温度和计数网格
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)
我有许多光谱: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)