python-3.x - 测试python浮点范围大小
问题描述
嘿,StackOverflow!我有一个我希望是一个简单的问题,我想看看是否有更简单的方法来解决这个问题。所以我有一个数据结构,其中有一堆数字范围。这些范围是传感器之间的关系值。这是一个例子
data1 = {
'sensor01': {'bucket': [1, 4], 'offline_count': 103},
'sensor04': {'bucket': [1.19, 2.24], 'offline_count': 32},
'sensor05': {'bucket': [3.19, 4.24], 'offline_count': 32},
'sensor06': {'bucket': [-1.16, 4.25], 'offline_count': 161},
'sensor07': {'bucket': [2.494331, 9.320493], 'offline_count': 203},
}
data2 = {
'sensor01': {'bucket': [3, 5], 'offline_count': 103},
'sensor04': {'bucket': [0.19, 1.25], 'offline_count': 32},
'sensor05': {'bucket': [4.19, 5.24], 'offline_count': 32},
'sensor06': {'bucket': [-2.16, 0.25], 'offline_count': 161},
'sensor07': {'bucket': [12.272427, 18.69733], 'offline_count': 203},
}
传感器的值是或可以简单地表示为具有不同精度级别的浮点数。我遇到的问题是我需要测试这些范围以确定任何给定时间点的最小可能范围。这在 Python 中以一种非常低效的方式或多或少地简单:
for k, v in data1.items():
d1_range = range(int(data1[k]['bucket'][0] * 1000), int(data1[k]['bucket'][1]) * 1000)
d2_range = range(int(data2[k]['bucket'][0] * 1000), int(data2[k]['bucket'][0]) * 1000)
if len(d1_range) < len(d2_range):
print("data1 range smaller")
else:
print("data2 range smaller")
虽然这确实有效,但我想知道是否有更有效的方法来做到这一点。似乎将浮点数相乘并在范围对象上使用 len 似乎需要大量处理。
谢谢!
解决方案
使用最大值和最小值之差的绝对值得到范围:
for k,v in data1.items():
b1 = data1[k]['bucket']
b2 = data2[k]['bucket']
d1 = abs(b1[1] - b1[0])
d2 = abs(b2[1] - b2[0])
if d1 < d2:
print("data1 range smaller")
else:
print("data2 range smaller")
推荐阅读
- laravel - Laravel 更改作业连接到不同的数据库
- ios - 如何快速将数据传递到下一个视图控制器?
- c++ - 尝试在 C++ 中逼近 pi 数字
- swift - 获取preferredContentSize的视图高度
- reactjs - 让 Antd React 的 Select 组件可访问
- c - 如何在没有 fopen 的情况下通过参数加载 txt 文件?更简单的方法?
- css - 使用 Elementor 页面构建器将单选按钮转换为星级
- php - 带有嵌套foreach的Laravel分页
- laravel - 拉拉维尔 | 带有回复的联系表格(自动回复发件人)
- masstransit - Masstransit 的 Mediator:如何取消长时间运行的消费者执行?