[英]matrix multiplication performance
代码如下:
In [180]: rng = np.random.RandomState(123)
In [181]: A1 = rng.uniform(size=(10000,80))
In [182]: B1 = rng.uniform(size=(10000,30))
In [183]: A2 = rng.uniform(size=(80,10000))
In [184]: B2 = rng.uniform(size=(30,10000))
In [185]: %timeit np.dot(A1.T, B1)
10 loops, best of 3: 136 ms per loop
In [186]: %timeit np.dot(A2, B2.T)
10 loops, best of 3: 25.1 ms per loop
In [4]: %timeit np.dot(A2, B1)
10 loops, best of 3: 56.3 ms per loop
我想乘(A1, B1)
和(A2, B2)
以形成(80,30)
矩阵,这里的不同之处在于A1
被定义为的转置A2
,具有10000
行A1
,但80
行中A2
。 与B1,B2
相同。
性能相当的不同,我想这是因为内存布局numpy.array
更为缓存友好与大柱比大排 ,对不对? 但是如何?
MCM是一种算法,它计算出最有效的方式来乘法一组矩阵,值得学习更多有关矩阵乘法的知识。 通常,矩阵乘法不是可交换的,根据顺序,您可以得到截然不同的运行时间来进行计算。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.