python - NumPy 数学函数比 Python 更快吗?

标签 python performance numpy

我有一个由基本数学函数(abs、cosh、sinh、exp、...)组合定义的函数。

我想知道使用它是否会有所不同(在速度方面),例如, numpy.abs() 而不是 abs()?

最佳答案

以下是计时结果:

lebigot@weinberg ~ % python -m timeit 'abs(3.15)' 
10000000 loops, best of 3: 0.146 usec per loop

lebigot@weinberg ~ % python -m timeit -s 'from numpy import abs as nabs' 'nabs(3.15)'
100000 loops, best of 3: 3.92 usec per loop

numpy.abs()abs() 慢,因为它也处理 Numpy 数组:它包含提供这种灵 active 的附加代码。

然而,Numpy 在数组上速度很快:

lebigot@weinberg ~ % python -m timeit -s 'a = [3.15]*1000' '[abs(x) for x in a]'
10000 loops, best of 3: 186 usec per loop

lebigot@weinberg ~ % python -m timeit -s 'import numpy; a = numpy.empty(1000); a.fill(3.15)' 'numpy.abs(a)'
100000 loops, best of 3: 6.47 usec per loop

(PS: '[abs(x) for x in a]' 在 Python 2.7 中比更好的 map(abs, a) 慢,大约快 30%——这仍然比 NumPy 慢得多。)

因此,numpy.abs() 1000 个元素所花费的时间并不比 1 个 float 多多少!

关于python - NumPy 数学函数比 Python 更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3650194/

相关文章:

python - 在 numpy 数组中查找多个值的行索引

python - 在 MacOS(Apple/Mac)上安装 Conda 的最佳方法是什么?

python导入错误

Java 8 - 将 List<byte[]> 合并到 byte[] 的最有效方法

python - 找到我的数据中斜率变化的位置作为可以轻松索引和提取的参数

python - 如何在 numpy 中对二维数组进行 bin?

Python 请求 POST 到带有验证 token 的网站

python - 在树莓派上设置 Google Assistant SDK 时遇到问题

python - 如何在 Pandas 数据框中使用带有多个表达式的 str.contains()?

php - 创建新变量或重新分配旧变量 - php