There are several confusions here...

Looking up what matlab's randn(312,256) does, I find that it:
"returns a pseudorandom, 312-by-256 matrix of values drawn
from a normal distribution with mean 0 and standard deviation 1."

As someone else noted, nothing here involves a 1000x1000 matrix.
In fact, it looks as though the MatLab code was run in a loop
1000 times for timing purposes as does your verb "jumbo" -
1000 (6!:2) 'expression' does this in j without creating a
program to do it, returning the average time for 1000 executions.

As Roger has pointed out, you were using a non random 312x256
matrix of EXACT integers (caused by the 256x and 312x in your
generations of A and B). The inner product on exact numbers takes
much longer than ordinary floating point numbers.

In any case, the numbers in the MatLab matrix are floating point
numbers distributed around 0 in such a way that their mean is 0
and standard deviation is 1. There isn't a built in function that
j uses to generate normal distributions, and writing an equivalent
to MatLab randn() would be an interesting exercise.



At 10:13  -0800 2007/11/08, [EMAIL PROTECTED] wrote:
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