矩阵乘法性能

时间:2014-07-15 02:00:16

标签: python performance numpy

代码如下,

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的内存布局更强缓存友好 大列更大行,对吗?但是如何?

1 个答案:

答案 0 :(得分:0)

MCM是一种算法,它可以计算出乘以一组矩阵的最有效方法,值得研究以了解矩阵乘法的更多信息。通常,矩阵乘法不是可交换的,并且根据顺序,您可以获得完全不同的运行时间进行计算。

Standard Wiki