gpt4 book ai didi

python - 使用整数的 Numpy 点积非常慢

转载 作者:太空狗 更新时间:2023-10-29 17:28:21 33 4
gpt4 key购买 nike

抱歉问了这么多问题。我在 Intel core 2 Duo 上运行 Mac OSX 10.6。我正在为我的研究运行一些基准测试,但我遇到了另一件让我感到困惑的事情。

如果我跑

python -mtimeit -s '将 numpy 导入为 np; a = np.random.randn(1e3,1e3)' 'np.dot(a,a)'

我得到以下输出:10 个循环,最好的 3 个:每个循环 142 毫秒

但是,如果我运行

python -mtimeit -s '将 numpy 导入为 np; a = np.random.randint(10,size=1e6).reshape(1e3,1e3)' 'np.dot(a,a)'

我得到以下输出:10 个循环,最好的 3 个:每个循环 7.57 秒

然后我跑了

python -mtimeit -s '将 numpy 导入为 np; a = np.random.randn(1e3,1e3)' 'a*a' 然后

python -mtimeit -s '将 numpy 导入为 np; a = np.random.randint(10,size=1e6).reshape(1e3,1e3)' 'a*a'

两者都以每个循环大约 7.6 毫秒的速度运行,因此它不是乘法运算。添加也有类似的速度,所以这些都不应该影响点积,对吧?那么为什么使用整数计算点积比使用 float 慢 50 多倍呢?

最佳答案

非常有趣,我很好奇它是如何实现的,所以我做了:

>>> import inspect
>>> import numpy as np
>>> inspect.getmodule(np.dot)
<module 'numpy.core._dotblas' from '/Library/Python/2.6/site-packages/numpy-1.6.1-py2.6-macosx-10.6-universal.egg/numpy/core/_dotblas.so'>
>>>

所以它看起来像是在使用 BLAS 库。

所以:

>>> help(np.core._dotblas)

我从中找到了这个:

When Numpy is built with an accelerated BLAS like ATLAS, these functions are replaced to make use of the faster implementations. The faster implementations only affect float32, float64, complex64, and complex128 arrays. Furthermore, the BLAS API only includes matrix-matrix, matrix-vector, and vector-vector products. Products of arrays with larger dimensionalities use the built in functions and are not accelerated.

所以看起来 ATLAS 微调了某些功能,但它只适用于某些数据类型,非常有趣。

是的,看来我会更频繁地使用 float ......

关于python - 使用整数的 Numpy 点积非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11856293/

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