tqdm和numpy矢量化

yuvru6vn  于 2023-08-05  发布在  其他
关注(0)|答案(3)|浏览(197)

我正在使用一个np.vectorize-艾德函数,并希望看到该函数与tqdm的进展。但是,我一直没能弄清楚如何做到这一点。
我找到的所有建议都与将计算转换为for循环或pd. DataFrame有关。

wgx48brx

wgx48brx1#

我终于找到了一个方法,它可以使用np.vectorize函数来更新tqdm进度条。我使用with Package 了vectorize函数

  1. with tqdm(total=len(my_inputs)) as pbar:
  2. my_output = np.vectorize(my_function)(my_inputs)

字符串
在my_function()中添加以下行

  1. global pbar
  2. pbar.update(1)


瞧!我现在有了一个随每次迭代更新的进度条。我的代码只有轻微的性能下降。
注意:当你示例化函数时,它可能会抱怨pbar还没有定义。在示例化之前只需输入一个pbar =,然后该函数将调用由with定义的pbar
希望对大家阅读这里有所帮助。

p8h8hvxi

p8h8hvxi2#

根据@Carl Kirstein的回答,我提出了以下解决方案。我将pbar元素作为参数添加到my_function中,并在函数中对其进行了更新。

  1. with tqdm(total=len(my_inputs)) as pbar:
  2. my_output = np.vectorize(my_function)(my_inputs, pbar)

字符串
my_function中的某个地方添加了pbar.update(1)

  1. def my_function(args, pbar):
  2. ...
  3. pbar.update(1)
  4. ...

zc0qhyus

zc0qhyus3#

据我所知,tqdm不会覆盖numpy.vectorize
要显示numpy数组的进度条,可以使用numpy.ndenumerate
给定输入和函数:

  1. import numpy as np
  2. from tqdm import tqdm
  3. a = np.array([1, 2, 3, 4])
  4. b = 2
  5. def myfunc(a, b):
  6. "Return a-b if a>b, otherwise return a+b"
  7. if a > b:
  8. return a - b
  9. else:
  10. return a + b

字符串
替换下面的矢量化部分

  1. # using numpy.vectorize
  2. vfunc = np.vectorize(myfunc)
  3. vfunc(a, b)


用这个

  1. # using numpy.ndenumerate instead
  2. [myfunc(x,b) for index, x in tqdm(np.ndenumerate(a))]


查看tqdm的进度。

展开查看全部

相关问题