Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.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
Python:在4-d数组上进行矢量化_Python_Vectorization - Fatal编程技术网

Python:在4-d数组上进行矢量化

Python:在4-d数组上进行矢量化,python,vectorization,Python,Vectorization,我有4-d风速阵列(时间,ht,x,y),我正试图从中计算湍流动能。为了做到这一点,在每个时间步和每个高度,我必须计算三个风分量的平均值,从每个网格点的速度中减去该平均值,计算每个网格点的TKE,并在该高度对其进行平均。这会产生很多循环,正如您在下面的代码中所看到的。我运行过一次,运行了一个多星期,这不利于快速分析 我的问题是:有没有一种方法可以将这些循环中的进程矢量化,从而帮助我的代码运行得更快?我见过1-d和2-d阵列上的示例,但没有我尝试做的那样大规模 tkehgt = np.empty(

我有4-d风速阵列(时间,ht,x,y),我正试图从中计算湍流动能。为了做到这一点,在每个时间步和每个高度,我必须计算三个风分量的平均值,从每个网格点的速度中减去该平均值,计算每个网格点的TKE,并在该高度对其进行平均。这会产生很多循环,正如您在下面的代码中所看到的。我运行过一次,运行了一个多星期,这不利于快速分析

我的问题是:有没有一种方法可以将这些循环中的进程矢量化,从而帮助我的代码运行得更快?我见过1-d和2-d阵列上的示例,但没有我尝试做的那样大规模

tkehgt = np.empty((289,39),np.float32)
for c in range(0,289,1):
    print count
    u_avg = np.empty((39),np.float32)
    v_avg = np.empty((39),np.float32)
    w_avg = np.empty((39),np.float32)
    for d in range(hgt_final.shape[1]):
        u_avg[d] = np.average(u[c,d,:,:])
        v_avg[d] = np.average(v[c,d,:,:])
        w_avg[d] = np.average(w[c,d,:,:])
    for e in range(hgt_final.shape[1]):
        tkegrid = np.empty((300,300),np.float32)
        for f in range(hgt_final.shape[2]):
            for g in range(hgt_final.shape[3]):
                uprime = u[c,e,f,g] - u_avg[e]
                vprime = v[c,e,f,g] - v_avg[e]
                wprime = w[c,e,f,g] - w_avg[e]
                tkegrid[f,g] = 0.5*(uprime**2+vprime**2+wprime**2)
        tkehgt[count,e] = np.average(tkegrid[:,:])

你能发布你的数据帧的一个小样本吗?@rahlf23我所有的数据都在远程服务器上的netCDF文件中,所以这有点棘手。如果您想处理“真实”数据,只需对u、v和w执行np.random.rand(289,39300300)*10或更小的数组可能会更容易。