我有一个json文件,其中包含给定温度下的扭矩数据元组。假设我从46度部分提取数据:
j = {"46": [[88.0, 95.3], [86.1, 93.4], [84.2, 91.3], [82.8, 89.7], [80.8, 87.8]]}
如果给我一个浮点数作为参考索引位置,例如:
index = 1.85
是否可以只使用浮点索引位置从数据进行插值?很明显,如果我尝试用一个直浮点数作为索引位置,它会给我:
TypeError: list indices must be integers or slices, not float
目前,我正在寻找最接近的整数以上和以下的浮点数,然后手动插值,但它是乏味的。我需要为元组中给出的两个数字的插值。例如,在索引1.85
处,我正在执行:
lower_first_num = j["46"][1][0]
upper_first_num = j["46"][2][0]
difference = lower_first_num - upper_first_num
result = lower_first_num - (difference * .85)
其中.85是两个指数点之间的百分比。然后我必须对元组中的第二个数字再次这样做。
关于给定的指数浮动,它们可能是许多不同的数字,因为这个程序将使用不同的数字运行数百次。
我只是想知道是否有一个预先建立的方法,我可以使用请.
1条答案
按热度按时间zfciruhq1#
如果您希望在值之间进行线性插值,则很可能只需稍微调整代码,使用
math.floor
和math.ceil
函数来获取给定索引上方和下方的索引。模(%
)运算符允许我们获取小数位。这样的东西应该足够了:
下面是一个图像(使用Desmos创建),绿色虚线表示每个点之间的线性插值,红色虚线表示index=1.85,红点表示插值点(1.85,84.485)。
你也可以把它写成一个函数,我在下面提供了几个变体,所有这些都隐含地假设你导入的是
floor
和ceil
。你选择哪一个最终是个人喜好的问题。我更喜欢第二种,因为它在简洁和清晰之间取得了平衡。
作为最后一点,您可能还希望对点执行线性回归,因为这可能对数据中的错误不太敏感,并且如果数据是线性的,则会产生更平滑的整体曲线。