热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何优化使用Numpy的连续值的for循环?

如何解决《如何优化使用Numpy的连续值的for循环?》经验,为你挑选了1个好方法。



1> Alexander..:

尽管没有向量化,但我相信以下解决方案的速度要快大约2倍(numba解决方案的速度要快60倍)。它将每个保存result为局部变量,而不是按位置访问numpy数组。

def unif_improved(n):
    m = 2**32
    a = 1664525
    c = 1013904223

    results = np.empty(n)
    results[0] = result = int((time.time() * 1e7) % m)

    for i in range(1, n):
        result = results[i] = (a * result + c) % m

    return results / m

您也可以考虑使用Numba来进一步提高速度。https://numba.pydata.org/

仅仅添加装饰器就可以@jit吹开其他解决方案的门。

from numba import jit

@jit
def unif_jit(n):
    # Same code as `unif_improved`

时机

>>> %timeit -n 10 unif_original(500000)
715 ms ± 21.5 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

>>> %timeit -n 10 unif_improved(500000)
323 ms ± 8 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

>>> %timeit -n 10 unif_jit(500000)
12 ms ± 2.68 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)


推荐阅读
author-avatar
蓝瑟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有