[Numpy-discussion] dot product: large speed difference metween seemingly indentical operations

Nadav Horesh nadavh at visionsense.com
Sun Oct 18 00:38:04 EDT 2015

The functions dot, matmul and tensordot performs the same on a MxN matrix multiplied by length N vector, but very different if the matrix is replaced by a PxQxN array. Why?

In [3]: a = rand(1000000,3)

In [4]: a1 = a.reshape(1000,1000,3)

In [5]: w = rand(3)

In [6]: %timeit a.dot(w)
100 loops, best of 3: 3.47 ms per loop

In [7]: %timeit a1.dot(w)  # Very slow!
10 loops, best of 3: 25.5 ms per loop

In [8]: %timeit a at w
100 loops, best of 3: 3.45 ms per loop

In [9]: %timeit a1 at w
100 loops, best of 3: 6.77 ms per loop

In [10]: %timeit tensordot(a,w,1)
100 loops, best of 3: 3.44 ms per loop

In [11]: %timeit tensordot(a1,w,1)
100 loops, best of 3: 3.41 ms per loop

BTW, this is not a corner case, since PxQx3 arrays represent RGB images.


More information about the NumPy-Discussion mailing list