On Mon, Oct 25, 2010 at 6:48 AM, Citi, Luca <lc...@essex.ac.uk> wrote:
> Hello,
> I have noticed a significant speed difference between the array and the 
> matrix implementation of the dot product, especially for not-so-big matrices.
> For example:
>
> In [1]: import numpy as np
> In [2]: b = np.random.rand(104,1)
> In [3]: bm = np.mat(b)
> In [4]: a = np.random.rand(8, 104)
> In [5]: am = np.mat(a)
> In [6]: %timeit np.dot(a, b)
> 1000000 loops, best of 3: 1.74 us per loop
> In [7]: %timeit am * bm
> 100000 loops, best of 3: 6.38 us per loop
>
> The results for two different PCs (PC1 with windows/EPD6.2-2 and PC2 with 
> ubuntu/numpy-1.3.0) and two different sizes are below:
>
>           array matrix
>
> 8x104 * 104x1
> PC1    1.74us   6.38us
> PC2    1.23us   5.85us
>
> 8x10 * 10x5
> PC1    2.38us   7.55us
> PC2    1.56us   6.01us
>
> For bigger matrices the timings seem to asymptotically approach.
>
> Is it something worth trying to fix or should I just accept this as a fact 
> and, when working with small matrices, stick to array?

I think the fixed overhead comes from the subclassing of arrays. The
subclassing is done in Python and if an operation creates a matrix
then __array_finalize__ is called. All that adds up to overhead.

http://github.com/numpy/numpy/blob/master/numpy/matrixlib/defmatrix.py

I wrote a mean-variance optimizer with matrices. Switching to arrays
gave me a big speed up.
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to