如何格式化 tqdm 进度条以显示每分钟而不是每秒的进度?
How can I format tqdm progress bar to show progress per minute instead of per second?
我在 GitHub or in the docs 上找不到这个,但我想知道是否有一种集成的方式(首选)或解决方法来显示一次迭代所需的平均时间(以分钟而不是秒为单位)。
具体来说,tqdm 显示类似 1283.31s/it
的内容,但如果每次迭代需要几分钟或几小时,则显示类似 21m/it
的内容会更有帮助。
我们可以通过使用指令 partially described in the manual:
将自定义 bar_format
参数添加到 tqdm
的自定义实例来实现
class TqdmExtraFormat(tqdm):
"""Provides a `minutes per iteration` format parameter"""
@property
def format_dict(self):
d = super(TqdmExtraFormat, self).format_dict
rate_min = '{:.2f}'.format(1/d["rate"] / 60) if d["rate"] else '?'
d.update(rate_min=(rate_min + ' min/' + d['unit']))
return d
我们在这里所做的是用自定义版本覆盖 format_dict
,该版本添加了可在 bar_format
参数中使用的新统计数据。 d
是已有的format_dict
,所以我们可以用它得到{rate}
的值,将其转换为每次迭代的时间(1/rate),除以60,然后格式化为2 位小数。然后,我们用新的统计数据更新 d
- 我们甚至可以使用字符串连接来添加一些格式。请注意,在任何迭代完成之前,{rate}
是 None
,这意味着除非您执行 if d["rate"]
检查,否则这将出错。
完成后,如果您使用 tqdm
的自定义实例,我们可以在 bar_format
参数字符串中与 Parameters 中列出的参数字符串一起使用此统计信息:
b='{l_bar}{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_min}{postfix}]'
for i in TqdmExtraFormat(range(2), unit_scale = 60, bar_format=b):
time.sleep(6)
我在 GitHub or in the docs 上找不到这个,但我想知道是否有一种集成的方式(首选)或解决方法来显示一次迭代所需的平均时间(以分钟而不是秒为单位)。
具体来说,tqdm 显示类似 1283.31s/it
的内容,但如果每次迭代需要几分钟或几小时,则显示类似 21m/it
的内容会更有帮助。
我们可以通过使用指令 partially described in the manual:
将自定义bar_format
参数添加到 tqdm
的自定义实例来实现
class TqdmExtraFormat(tqdm):
"""Provides a `minutes per iteration` format parameter"""
@property
def format_dict(self):
d = super(TqdmExtraFormat, self).format_dict
rate_min = '{:.2f}'.format(1/d["rate"] / 60) if d["rate"] else '?'
d.update(rate_min=(rate_min + ' min/' + d['unit']))
return d
我们在这里所做的是用自定义版本覆盖 format_dict
,该版本添加了可在 bar_format
参数中使用的新统计数据。 d
是已有的format_dict
,所以我们可以用它得到{rate}
的值,将其转换为每次迭代的时间(1/rate),除以60,然后格式化为2 位小数。然后,我们用新的统计数据更新 d
- 我们甚至可以使用字符串连接来添加一些格式。请注意,在任何迭代完成之前,{rate}
是 None
,这意味着除非您执行 if d["rate"]
检查,否则这将出错。
完成后,如果您使用 tqdm
的自定义实例,我们可以在 bar_format
参数字符串中与 Parameters 中列出的参数字符串一起使用此统计信息:
b='{l_bar}{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_min}{postfix}]'
for i in TqdmExtraFormat(range(2), unit_scale = 60, bar_format=b):
time.sleep(6)