gpt4 book ai didi

python - 速度比较。 numpy 与 python 标准

转载 作者:太空狗 更新时间:2023-10-29 17:19:24 25 4
gpt4 key购买 nike

我做了一些实验,发现很多情况下 python 的标准 randommath 库比 numpy 库更快。

我认为有一种趋势是 python 的标准库对于小规模操作要快 10 倍左右,而 numpy 对于大规模(向量)操作要快得多。我的猜测是 numpy 有一些开销,这在小情况下占主导地位。

我的问题是:我的直觉是否正确?对于小型(通常是标量)操作,通常建议使用标准库而不是 numpy 吗?

示例如下。

import math
import random
import numpy as np

对数和指数

%timeit math.log(10)
# 158 ns ± 6.16 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

%timeit np.log(10)
# 1.64 µs ± 93.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%timeit math.exp(3)
# 146 ns ± 8.57 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

%timeit np.exp(3)
# 1.72 µs ± 78.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

生成正态分布

%timeit random.gauss(0, 1)
# 809 ns ± 12.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%timeit np.random.normal()
# 2.57 µs ± 14.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

选择一个随机元素

%timeit random.choices([1,2,3], k=1)
# 1.56 µs ± 55.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%timeit np.random.choice([1,2,3], size=1)
# 23.1 µs ± 1.04 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

与 numpy 数组相同

arr = np.array([1,2,3])

%timeit random.choices(arr, k=1)
# 1.72 µs ± 33.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%timeit np.random.choice(arr, size=1)
# 18.4 µs ± 502 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

大阵

arr = np.arange(10000)

%timeit random.choices(arr, k=1000)
# 401 µs ± 6.16 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit np.random.choice(arr, size=1000)
# 41.7 µs ± 1.39 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

最佳答案

numpy 只是对大数据 block 的性能改进。如果数组不是相对较大,则在将 ndarray 倒入 c 编译的 numpy 函数之前确保内存块正确排列的开销通常会压倒任何时间优势.这就是为什么这么多 numpy 问题基本上都是“我如何处理这个循环代码并让它变得更快”,以及为什么它在这个标签中被认为是一个有效的问题,几乎任何其他标签都会把你扔到Code review在他们获得冠军之前。

所以,是的,您的观察具有普遍性。向量化是 numpy 的重点。未矢量化的 numpy 代码总是比裸 python 代码慢,并且可以说是“错误的”,就像用手提钻敲核桃一样。要么找到合适的工具,要么获得更多坚果。

关于python - 速度比较。 numpy 与 python 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52603487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com