python-尽管Numpy建议a.b,为什么a.dot(b)比a @ b更快
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-尽管Numpy建议a.b,为什么a.dot(b)比a @ b更快,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1862字,纯文字阅读大概需要3分钟。
内容图文
![python-尽管Numpy建议a.b,为什么a.dot(b)比a @ b更快](/upload/InfoBanner/zyjiaocheng/669/ad60d88e188e4766b5b8451bd287d13a.jpg)
根据question的答案,也根据numpy的答案,与a.dot(b)相比,二维数组的矩阵乘法最好通过a b或numpy.matmul(a,b)完成.
If both a and b are 2-D arrays, it is matrix multiplication, but using
matmul or a @ b is preferred.
我做了以下基准测试,发现相反的结果.
问题:我的基准测试有问题吗?如果不是,当Numpy比a @ b或numpy.matmul(a,b)快时,为什么Numpy不推荐a.dot(b)?
基准使用python 3.5 numpy 1.15.0.
$pip3 list | grep numpy
numpy 1.15.0
$python3 --version
Python 3.5.2
基准代码:
import timeit
setup = '''
import numpy as np
a = np.arange(16).reshape(4,4)
b = np.arange(16).reshape(4,4)
'''
test = '''
for i in range(1000):
a @ b
'''
test1 = '''
for i in range(1000):
np.matmul(a,b)
'''
test2 = '''
for i in range(1000):
a.dot(b)
'''
print( timeit.timeit(test, setup, number=100) )
print( timeit.timeit(test1, setup, number=100) )
print( timeit.timeit(test2, setup, number=100) )
结果:
test : 0.11132473500038031
test1 : 0.10812476599676302
test2 : 0.06115105600474635
附加结果:
>>> a = np.arange(16).reshape(4,4)
>>> b = np.arange(16).reshape(4,4)
>>> a@b
array([[ 56, 62, 68, 74],
[152, 174, 196, 218],
[248, 286, 324, 362],
[344, 398, 452, 506]])
>>> np.matmul(a,b)
array([[ 56, 62, 68, 74],
[152, 174, 196, 218],
[248, 286, 324, 362],
[344, 398, 452, 506]])
>>> a.dot(b)
array([[ 56, 62, 68, 74],
[152, 174, 196, 218],
[248, 286, 324, 362],
[344, 398, 452, 506]])
解决方法:
您的前提不正确.您应该使用较大的矩阵来衡量性能,以避免函数调用使无关紧要的计算相形见war.
使用Python 3.60 / NumPy 1.11.3,您会发现,如here所述,@调用np.matmul,两者的性能均优于np.dot.
import numpy as np
n = 500
a = np.arange(n**2).reshape(n, n)
b = np.arange(n**2).reshape(n, n)
%timeit a.dot(b) # 134 ms per loop
%timeit a @ b # 71 ms per loop
%timeit np.matmul(a,b) # 70.6 ms per loop
还要注意,如文档中所述,np.dot在功能上不同于@ / np.matmul.特别是,它们在处理尺寸大于2的矩阵方面有所不同.
内容总结
以上是互联网集市为您收集整理的python-尽管Numpy建议a.b,为什么a.dot(b)比a @ b更快全部内容,希望文章能够帮你解决python-尽管Numpy建议a.b,为什么a.dot(b)比a @ b更快所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。