Python 表中的间接双线性插值

Python 表中的间接双线性插值,python,numpy,scipy,interpolation,bilinear-interpolation,Python,Numpy,Scipy,Interpolation,Bilinear Interpolation,我想用这个表对两个电压信号进行插值,并将它们转换成相应的温度值。这不是我想要执行的直接双线性插值 例如: T1:1.721V T2:4.025 V 步骤1:在内部温度上插入T1。Ch1 最终温度为134.375℃ 步骤2:从T2开始,确定参考Z下预期值(250-300°C)的可能行,T1位于125°C和140°C之间)。 这为我提供了以下网格: 3.608 3.616 4.462 4.468 现在,我想通过插值(max和min)计算相应的电压。我得到了3.613V和4.46575V

我想用这个表对两个电压信号进行插值,并将它们转换成相应的温度值。这不是我想要执行的直接双线性插值

例如: T1:1.721V T2:4.025 V

步骤1:在内部温度上插入T1。Ch1 最终温度为134.375℃

步骤2:从T2开始,确定参考Z下预期值(250-300°C)的可能行,T1位于125°C和140°C之间)。 这为我提供了以下网格: 3.608 3.616 4.462 4.468 现在,我想通过插值(max和min)计算相应的电压。我得到了3.613V和4.46575V

步骤3:使用步骤2中计算的两个电压值,沿行进行插值。i、 e.在250-300°C和3.613 V-4.46575 V之间,以确定对应于T2=4.025 V的温度(以°C为单位)

有没有办法通过直接读取像这样的表作为数据帧来实现这一点

我已经能够在excel上使用索引和匹配来完成这项工作,一种更长的方法是从表中连续读取。例如,这样的代码可以实现步骤1:

internal=ref_table.loc[['Internal Temp. (Ch1)'],:].squeeze()
y=[20,85,100,125,140,150,160,170,180]
tit_p1=[]
for i in raw_data['T1 Intern']:
    j=np.interp(i,internal,y)
    tit_p1.append(j)
print(tit_p1)
然而,我有很多表格要处理,如果我能以某种方式将电压值转换为温度,将表格用作网格,这会容易得多


任何帮助都将不胜感激!谢谢

这对我有用!我为任何可能尝试做类似事情的人发布了一个答案

将numpy导入为np
作为pd进口熊猫
ref_table=pd.read_csv('电压-温度转换'u 1.csv',编码'ISO-8859-1',sep=';',索引'u col='referez')
ref_table=ref_table.dropna(how='all',axis=1)
ref_table=ref_table.dropna(how='all',axis=0)
打印(参考表格)
T1=值
T2=值_2
参考1=[]
对于ref_table.iloc[2,:]中的i:
参考1.附加(i)
参考1[:]=[参考1中x的值-x]
idx=ref_1.索引(最小值(如果i>0,则i代表ref_1中的i))
T_it=np.interp(value,ref_table.iloc[2,idx:idx+2],ref_table.columns[idx:idx+2].astype(int))
ref_choose=ref_table.iloc[3:,idx:idx+2]
参考2=[]
对于ref_中的i,选择.iloc[:,0]:
参考2.附加(i)
ref_2[:]=[ref_2中x的值_2-x]
idx_2=参考_2.索引(最小值(如果i>0,则参考_2中的i表示i))
ref_fgrid=ref_choose.iloc[idx_2:idx_2+2,:]
Vr_min=np.interp(T_it,ref_fgrid.columns.astype(int),ref_fgrid.iloc[0,:]))
Vr_max=np.interp(T_it,ref_fgrid.columns.astype(int),ref_fgrid.iloc[1,:])
T_ch=np.interp(value_2,[Vr_min,Vr_max],ref_choose.index.astype(int)[idx_2:idx_2+2])

您能更详细地解释一下这个过程吗?
T1
T2
是如何相互关联的?在剩下的计算中,您如何准确地使用步骤1的结果?表中一行内的电压值不是单调的,因此通过插值可能很难找到正确的列。@ThomasKühn这是我举的两个样本点的详细计算。第1步:Tit=(Tit\u max-Tit\u min)/(Vch1\u max-Vch1\u min)*(T1-Vch1\u max)+Tit\u max=(140-125)/(1.817-1.561)*(1.721-1.817)+140=134.375。第二步:Vr_min=(Vch_max-Vch_min)/(Tit_max-Tit_min)*(Tit-Tit_max)+Vch_max=(3.616-3.608)/(140-125)*(134.375-140)+3.616=3.613;步骤3:T_ch=(Tr_max-Tr_min)/(Vr_max-Vr_min)*(T2-Vr_max)+Tr_max=(300-250)/(4.46575-3.613)*(4.025-4.46575)+300=274。16@ThomasKühn基本上,在步骤2中,我根据T1的值在两列之间定位。然后,使用T2,我尝试沿着行标签定位相应的适当温度。根据行标签,T1在列标签上介于125和140之间,T2在250和300之间。因此,我在3.608(125°C)和3.616(140°C)之间插值以找到Vr_min,在4.402(125°C)和4.468(140°C)之间插值以找到Vr_max,以找到在步骤3中沿行标签插值的输入。