Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Numba时的进度条(TQM不工作)-Python_Python_Numpy_Parallel Processing_Progress Bar_Numba - Fatal编程技术网

使用Numba时的进度条(TQM不工作)-Python

使用Numba时的进度条(TQM不工作)-Python,python,numpy,parallel-processing,progress-bar,numba,Python,Numpy,Parallel Processing,Progress Bar,Numba,我一直在尝试使用numba运行代码,我还添加了一个打印以查看代码的进度: from numba import jit,njit,prange import numpy as np # for minimum reproducible example a=1e5 ar = np.random.rand(a) at = np.random.rand(a) an = np.random.rand(a) ###############################3 tau = 1

我一直在尝试使用numba运行代码,我还添加了一个打印以查看代码的进度:

from numba import jit,njit,prange
import numpy as np
# for minimum reproducible example
a=1e5
ar = np.random.rand(a)
at = np.random.rand(a)
an = np.random.rand(a)
###############################3


tau    = 1        # time lag
window = 6000


@njit(parallel=True)
def func_DB(ar,at,an):
    DBtotal= np.zeros((len(an)-tau))
    k = 0
    for i in prange(0,len(an)-tau,1):
        DBtotal[i] = np.sqrt((ar[i + tau]- ar[i])**2 +(at[i + tau]- at[i])**2 +(an[i + tau]- an[i])**2)
       ## To print the progress
         if i%1e5==0:
            k+=1
            print(k*1e5/len(DBtotal))
    return DBtotal


@njit(parallel=True)
def func_PVI(tau, window):
    PVI = np.zeros((len(DBtotal)))
    k = 0
    for i in prange(int(window/2),len(DBtotal)-int(window/2)): 
        PVI[i] = DBtotal[i]/np.sqrt((np.mean(DBtotal[i-int(window/2):i+int(window/2)]**2)))
       # To print the progress
        if i%1e5==0:
            k+=1
            print(k*1e5/len(DBtotal))
    return PVI 
DBtotal = func_DB(ar,at,an)
PVI     = func_PVI(DBtotal,tau, window)
但是,当代码运行时,我没有得到我期望的结果(即,随着代码的运行,值从0变为1),而是得到以下结果:

Out[:] 0.009479390005044932
      0.009479390005044932
      0.009479390005044932
      0.009479390005044932
      0.009479390005044932
      0.018958780010089864
有人能推荐一种查看代码进度的方法吗


此外,任何提高代码效率的建议都将不胜感激

我将函数分解为若干部分,并在其周围包装了一个TQM

而不是

@jit(nopython=True)
def dothings(A, rows, cols):
    for r in range(rows):
        for c in range(cols):
            stuff...

dothings(data, data.shape[0], data.shape[1])
我曾经

rows=data.shape[0]
@jit(nopython=True)
def dothings(A, cols, r):
#    for r in range(rows):
        for c in range(cols):
            stuff...
    
for r in tqdm.tqdm(range(rows), total=rows):
    dothings(data, data.shape[1], r)

因为并行进程中的函数可以得到相同的结果,所以可以得到相同的值。您应该创建一个全局变量,并在所有流程中使用它来计算一个变量中的所有变量,但我不知道全局变量是否适用于流程。它可能需要使用
队列
将信息发送到一个进程,该进程将计算所有数据并显示结果。@furas感谢您的建议,但似乎不起作用!