tqdm 和 numpy 向量化

Avi*_*eyi 7 python numpy tqdm

我正在使用np.vectorize-ed 函数,并希望使用tqdm. 但是,我一直无法弄清楚如何做到这一点。

我发现的所有建议都与将计算转换为 for 循环或 pd.DataFrame 相关。

ani*_*bey 1

据我所知,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
Run Code Online (Sandbox Code Playgroud)

替换下面的矢量化部分

# using numpy.vectorize
vfunc = np.vectorize(myfunc)
vfunc(a, b)
Run Code Online (Sandbox Code Playgroud)

有了这个

# using numpy.ndenumerate instead
[myfunc(x,b) for index, x in tqdm(np.ndenumerate(a))]
Run Code Online (Sandbox Code Playgroud)

才能看到tqdm进展。

  • 啊,这仍然只是使用“for-loop”,我知道该怎么做。我希望让“tqdm”与“np.vectorize”一起使用。另外,我尝试了你的方法,我注意到有很大的时间差异。这是因为日志记录还是因为您的方法不使用“np.vectorize”?EG:`np_vectorized_sumtiming: 0:00:00.005858`和`np_ndenumerate_sumtiming:0:00:02.856294`(对100×100网格进行求和) (2认同)
  • 我认为差异是由于在“np.vectorize”中使用了 SIMD。 (2认同)