我有一个相当大的代码,我需要优化.经过一些分析后time.time()
,我发现占用最多处理时间的行(它执行了数千次)是这样的:
A = np.cos(a) * np.cos(b) - np.sin(a) * np.sin(b) * np.sin(c - d)
所有变量都可以随机定义:
N = 5000 a = np.random.uniform(0., 10., N) b = np.random.uniform(0., 50., N) c = np.random.uniform(0., 30., N) d = np.random.uniform(0., 25., N)
有没有办法提高计算的性能A
?正如我已经使用的那样numpy
,我几乎没有想法.
通过使用乘积和总和.身份,你可以减少三角形的数量.函数调用.在下文中,func1
与func2
计算值相同,但func2
使得更少的调用来触发.功能.
import numpy as np def func1(a, b, c, d): A = np.cos(a) * np.cos(b) - np.sin(a) * np.sin(b) * np.sin(c - d) return A def func2(a, b, c, d): s = np.sin(c - d) A = 0.5*((1 - s)*np.cos(a - b) + (1 + s)*np.cos(a + b)) return A
以下是与时间比较N = 5000
:
In [48]: %timeit func1(a, b, c, d) 1000 loops, best of 3: 374 µs per loop In [49]: %timeit func2(a, b, c, d) 1000 loops, best of 3: 241 µs per loop