我目前正在做一个项目,估计流量计的不确定性。仪表不确定度基于四个不同的值:
第三方提供多个不同liq、cP、wlr和gvf值的仪表表。正如你所猜测的那样,仪表上的数据永远不会完全落入预定义的值中。例如,一分钟的数据可以读取:
利用上述数据,对表格进行四次插值,找出不确定度的大小。你知道吗
我已经想出了一个解决办法,但它似乎笨重,我想知道是否有人有任何想法。我对熊猫游戏还是个新手,非常感谢看到其他人的解决方案。你知道吗
最初,我对数据进行排序,将表缩小为高于或低于我要查找的实际点的值。你知道吗
aliq = 6532 # stbpd
avisc = 22 # centipoise
awlr = 0.412 # water liquid ratio
agvf = 0.634 # gas volume fraction
def findclose(num, colm):
arr = colm.unique()
if num in arr:
clslo = num
clshi = num
else:
clslo = arr[arr > num].min() # close low value
clshi = arr[arr < num].max() # close high value
return [clslo, clshi]
df = tbl_vx52[
(tbl_vx52['liq'].isin(findclose(aliq,tbl_vx52['liq']))) &
(tbl_vx52['visc'].isin(findclose(avisc,tbl_vx52['visc']))) &
(tbl_vx52['wlr'].isin(findclose(awlr,tbl_vx52['wlr']))) &
(tbl_vx52['gvf'].isin(findclose(agvf,tbl_vx52['gvf'])))
].reset_index(drop=True)
该表从2240个值减少到16个值。而不是包括所有的数据(tbl\U vx52)。我已经创建了一些要加载的代码,这样您就可以看到子数据帧是什么样子的,称为df,它只包含本例中区域上方和下方的值。你知道吗
df = pd.DataFrame({'liq':[5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 7000, 7000, 7000, 7000, 7000, 7000, 7000, 7000],
'visc':[10, 10, 10, 10, 30, 30, 30, 30, 10, 10, 10, 10, 30, 30, 30, 30],
'wlr':[0.375, 0.375, 0.5, 0.5, 0.375, 0.375, 0.5, 0.5, 0.375, 0.375, 0.5, 0.5, 0.375, 0.375, 0.5, 0.5],
'gvf':[0.625, 0.75, 0.625, 0.75, 0.625, 0.75, 0.625, 0.75, 0.625, 0.75, 0.625, 0.75, 0.625, 0.75, 0.625, 0.75],
'uncert':[0.0707, 0.0992, 0.0906, 0.1278, 0.0705, 0.0994, 0.091, 0.128, 0.0702, 0.0991, 0.0905, 0.1279, 0.0704, 0.0992, 0.0904, 0.1283],
})
一些相当粗糙的循环是基于单个输入(liq、visc、wlr或gvf)开始配对的。下面显示的是gvf上的第一个循环。你知道吗
pairs = [
slice(0,1),
slice(2,3),
slice(4,5),
slice(6,7),
slice(8,9),
slice(10,11),
slice(12,13),
slice(14,15)]
for pair in pairs:
df.loc[pair,'uncert'] = np.interp(
agvf,
df.loc[pair,'gvf'],
df.loc[pair,'uncert']
)
df.loc[pair,'gvf'] = agvf
df = df.drop_duplicates().reset_index(drop=True)
删除重复值,从16行减少到8行。然后再次对wlr重复此操作。你知道吗
pairs = [
slice(0,1),
slice(2,3),
slice(4,5),
slice(6,7)
]
for pair in pairs:
df.loc[pair,'uncert'] = np.interp(
awlr,
df.loc[pair,'wlr'],
df.loc[pair,'uncert']
)
df.loc[pair,'wlr'] = awlr
df = df.drop_duplicates().reset_index(drop=True)
对visc(四行)和liquid(两行)重复上述结构,直到子数组中只剩下一个值。它给出了你工作点的不确定度。你知道吗
我知道它很笨重。如果您对不同方法有任何意见或想法,我们将不胜感激。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐