为了账号安全,请及时绑定邮箱和手机立即绑定

tqdm 和 numpy 向量化

tqdm 和 numpy 向量化

qq_遁去的一_1 2022-05-19 18:56:30
我正在使用np.vectorize-ed 函数,并希望查看函数的进度tqdm。但是,我无法弄清楚如何做到这一点。我发现的所有建议都与将计算转换为 for 循环或转换为 pd.DataFrame 有关。
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

我终于找到了一种方法,可以让 tqdm 进度条使用 np.vectorize 函数进行更新。我使用 with 包装了矢量化函数


with tqdm(total=len(my_inputs)) as pbar:

    my_output = np.vectorize(my_function)(my_inputs)

在 my_function() 然后我添加以下行


global pbar

pbar.update(1)

瞧!我现在有一个进度条,每次迭代都会更新。我的代码只有轻微的性能下降。


注意:当您实例化该函数时,它可能会抱怨 pbar 尚未定义。只需在实例化之前加上一个 pbar = 0,然后函数就会调用 with 定义的 pbar


希望对在这里阅读的每个人都有帮助。


查看完整回答
反对 回复 2022-05-19
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

据我所知,tqdm不会结束numpy.vectorize。


要显示 numpy 数组的进度条,numpy.ndenumerate可以使用。


给定输入和功能:


import numpy as np

from tqdm import tqdm


a = np.array([1, 2, 3, 4])

b = 2

def myfunc(a, b):

    "Return a-b if a>b, otherwise return a+b"

    if a > b:

        return a - b

    else:

        return a + b

替换下面的这个矢量化部分


# using numpy.vectorize

vfunc = np.vectorize(myfunc)

vfunc(a, b)

有了这个


# using numpy.ndenumerate instead

[myfunc(x,b) for index, x in tqdm(np.ndenumerate(a))]

来看看tqdm进度。


查看完整回答
反对 回复 2022-05-19
?
HUX布斯

TA贡献1876条经验 获得超6个赞

我想出了以下解决方案。我将 pbar 元素添加my_function为参数并在函数内部对其进行了更新。


with tqdm(total=len(my_inputs)) as pbar:

    my_output = np.vectorize(my_function)(my_inputs, pbar)

我在里面my_function某处添加了pbar.update(1).


def my_function(args, pbar):

    ...

    pbar.update(1)

    ...


查看完整回答
反对 回复 2022-05-19
  • 3 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号