【发布时间】:2017-05-08 20:49:01
【问题描述】:
我按如下方式计算点积:
import numpy as np
A = np.random.randn(80000, 3000)
B = np.random.randn(3000, 50)
C = np.dot(A, B)
运行此脚本大约需要 9 秒:
Mac@MacBook-Pro:~/python_dot_product$ time python dot.py
real 0m9.042s
user 0m10.927s
sys 0m0.911s
我能做得更好吗? numpy 是否已经为核心使用了理想的平衡?
【问题讨论】:
-
这应该是最快的方法。如果您希望对其他解决方案进行基准测试,请尝试使用 the
@operator -
使用
np.__config__.show()调查它使用什么库进行矩阵乘法。另一种方法是打开系统监视器并进行目视检查。 -
除了将 BLAS 后端更改为
numpy,您可能不会比这更快。 -
当我重新运行你的代码时,我需要 14 秒,而 13 秒只是创建
A和B。因此,当您测试替代方案时,请记住仅跟踪函数操作的时间(在本例中为 np.dot)。这应该提供更相关的比较。 -
我想我会在
np.dot上使用multiprocessing的pool.map来回答这个问题,但这花了我6 倍的时间。再看一些,下面链接中的第二个和第三个答案(但不是第一个/接受的答案)应该会有所帮助。 stackoverflow.com/questions/11442191/…
标签: python performance numpy multiprocessing