当前位置:  开发笔记 > 编程语言 > 正文

提高numpy三角函数的运算性能

如何解决《提高numpy三角函数的运算性能》经验,为你挑选了1个好方法。

我有一个相当大的代码,我需要优化.经过一些分析后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,我几乎没有想法.



1> Warren Wecke..:

通过使用乘积和总和.身份,你可以减少三角形的数量.函数调用.在下文中,func1func2计算值相同,但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

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有