首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >numba函数中的这个循环可以优化为运行得更快吗?

numba函数中的这个循环可以优化为运行得更快吗?
EN

Stack Overflow用户
提问于 2019-06-10 08:33:25
回答 1查看 611关注 0票数 3

在我的python代码中,我需要遍历大约2500万次,我希望尽可能地对其进行优化。循环中的操作非常简单。为了使代码更高效,我使用了numba模块,这非常有帮助,但如果可能的话,我想进一步优化代码。

下面是一个完整的工作示例:

代码语言:javascript
复制
import numba as nb
import numpy as np
import time 
#######create some synthetic data for illustration purpose##################
size=5000
eps = 0.2
theta_c = 0.4
temp = np.ones(size)
neighbour = np.random.randint(size, size=(size, 3)) 
coschi = np.random.random_sample((size))
theta = np.random.random_sample((size))*np.pi/2
pwr = np.cos(theta)
###################end of dummy data##########################

###################-----main loop------###############
@nb.jit(fastmath=True)
def func(theta, pwr, neighbour, coschi, temp):
    for k in range(np.argmax(pwr), 5000*(pwr.size)): 
        n = k%pwr.size
        if (np.abs(theta[n]-np.pi/2.)<np.abs(theta_c)):
                adj = neighbour[n,1]
        else:
                adj = neighbour[n,0]
        psi_diff = np.abs(np.arccos(coschi[adj])-np.arccos(coschi[n]))
        temp5 = temp[adj]**5;
        e_temp = 1.- np.exp(-temp5*psi_diff/np.abs(eps))
        temp[n] = temp[adj] + (e_temp)/temp5*(pwr[n] - temp[adj]**4)
    return temp

#check time
time1 = time.time()
temp = func(theta, pwr, neighbour, coschi, temp)
print("Took: ", time.time()-time1, " seconds.")

这会占用我机器上的3.49 seconds

为了某种模型拟合的目的,我需要运行这段代码数千次,因此,即使是1秒的优化也意味着为我节省了数十个小时。

可以做什么来进一步优化这段代码?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56519360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档