Непрямая билинейная интерполяция со стола
Справочная таблица. Я хочу интерполировать значения двух сигналов напряжения, используя эту таблицу, и преобразовать их в соответствующие значения температуры. Это не прямая билинейная интерполяция, которую я хочу выполнить.
например: T1: 1,721 В T2: 4,025 В
Шаг 1: интерполировать T1 по внутренней температуре. Ch1 I заканчивается 134,375 °C.
Шаг 2: Начиная с T2, определите возможную строку ожидаемых значений (между 250-300 °C) в Referenz, а T1 лежит между 125 °C и 140 °C) в столбцах. Это дает мне следующую сетку: 3.608 3.616 4.462 4.468 Теперь я хотел бы рассчитать соответствующие напряжения путем интерполяции (макс и мин). Я в конечном итоге с 3,613 В и 4,46575 В.
Шаг 3: Используя два значения напряжения, рассчитанные на шаге 2, интерполируйте вдоль строк. то есть между 250-300 ° C и 3,613 В -4,46575 В, чтобы найти температуру в ° C, соответствующую T2 = 4,025 В.
Есть ли способ сделать это, непосредственно читая в таблице, как это, как фрейм данных?
Я смог сделать это в Excel, используя index и match, и более длительный способ сделать это - читать серии из таблицы. Например, такой код для выполнения шага 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)
Тем не менее, у меня есть много таблиц для работы, и было бы намного проще, если бы я мог каким-то образом преобразовать значения напряжения в температуру, используя таблицу в качестве ячеистой сетки.
Любая помощь будет оценена! Спасибо!
1 ответ
Это сработало для меня! Я публикую ответ для любого, кто может попытаться сделать что-то подобное.
import numpy as np
import pandas as pd
ref_table=pd.read_csv('Voltage Temp conversion_1.csv',encoding='ISO-8859-1',sep=';',index_col='Referenz')
ref_table=ref_table.dropna(how='all',axis=1)
ref_table=ref_table.dropna(how='all',axis=0)
print(ref_table)
T1=value
T2=value_2
ref_1=[]
for i in ref_table.iloc[2,:]:
ref_1.append(i)
ref_1[:] = [value - x for x in ref_1]
idx=ref_1.index(min(i for i in ref_1 if i > 0))
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]
ref_2=[]
for i in ref_choose.iloc[:,0]:
ref_2.append(i)
ref_2[:] = [value_2 - x for x in ref_2]
idx_2=ref_2.index(min(i for i in ref_2 if i > 0))
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])
Ура!