优化加速多循环python程序

为了循环计算区域相关系数,找到最大的相关系数的位置,编写python程序如下。但是由于循环较多导致程序计算速度较慢,我这边已经做过的尝试有:
1、我这边已经用numba的cpu并行加速了,速度提高了不少,但是还是不能满足要求。
2、想要优化循环,但是这些循环关系到每次数据切片的动态变化,所以不好改向量化。
3、我尝试过taichi采用gpu运算,但是这种方法不能数据切片。
所以求助大家能否帮我优化加速程序,非常感谢各位

Python

讨论数量: 2

试过cython吗? cython不是也可以用来加速嘛。cython,numba(with jit),看代码好像代码结构也没法咋优化了。如果还不行,可能直接改成其他语言来写扩展了。。。😅

1年前 评论

在你的問題中,你提到你已經嘗試使用 numba 和 Taichi 進行加速,但效果並不理想。在這種情況下,一種可能的解決方案是使用 Dask。Dask 是一個靈活的並行計算庫,可以處理大型計算任務。這是一個使用 Dask 優化你程式碼的範例: import numpy as np import dask.array as da

假設 ww 是一個 numpy array

ww_dask = da.from_array(ww, chunks=(1, 100, 100))

def calculate_corrcoef(tim, ii, jj, ddx, dmax, ww): t2 = ww[tim, (ii-ddx):(ii+ddx), (jj-ddx):(jj+ddx)].flatten() wmax = 0.0 im, jm = ii, jj for i in range(max(ii-dmax, 0), min(ii+dmax, ww.shape[1])): for j in range(max(jj-dmax, 0), min(jj+dmax, ww.shape[2])): t1 = ww[(tim-1), (i-ddx):(i+ddx), (j-ddx):(j+ddx)].flatten() temp = np.corrcoef(t1, t2)[0, 1] if temp > wmax: wmax = temp im, jm = i, j return wmax, im, jm

result = da.map_blocks(calculate_corrcoef, ww_dask, dtype=float, drop_axis=(0,), new_axis=(0,), chunks=(1, 100, 100))

使用 result.compute() 來執行計算

10个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!