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