Your J code uses extended precision numbers which are
orders of magnitude slower than ordinary numbers.
I strongly suspect the MatLab arrays are ordinary numbers.

jumbo =: monad define
    for. i. y do.
        yVector =: A +/ .* B
    end.
)

NB. extended precision numbers
A =: 256 312 $ 1+ i. 312 * 256x
B =: 312   1 $ 1+ i. 312x
   timer 'jumbo 100'
10.7434

NB. ordinary numbers
A =: 256 312 $ 1+ i. 312 * 256
B =: 312   1 $ 1+ i. 312

   timer 'jumbo 100'
0.022207



----- Original Message -----
From: [EMAIL PROTECTED]
Date: Thursday, November 8, 2007 10:13
Subject: [Jprogramming] speed of matrix*vector operation.
To: [email protected]

> I told my friend about how nice J was.  Am I wrong?
> 
> He said, how fast can you multiply a 1000x1000 matrix times
> a 1x1000 vector to get a 1x1000 resultant vector.
> 
> his MatLab code ran in about .6 seconds.
> 
> His code follows..
> 
> matrix = randn(312,256);
> vector = randn(256,1);
> 
> tic
> for i = 1:1000
>     output = matrix*vector;
> end
> toc
> 
> I wrote my code which runs in about 2.5 minutes
> 
> here is my code:
> 
> #!/home/efittery/bin/jconsole
> 
> A =: 256 312 $ 1+ i. 312 * 256x
> B =: 312   1 $ 1+ i. 312x
> 
> jumbo =: monad define
>     for. i. y do.
>         yVector =: A +/ .* B
>     end.
>     )
> 
> jumbo 1000
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to