[Scilab-users] funny result for tensor norm calculation
Adrien Vogt-Schilb
vogt at centre-cired.fr
Wed Sep 26 22:31:55 CEST 2012
On 26/09/2012 19:42, Paul Carrico wrote:
>
> Dear All,
>
> A funny result for calculating the norm of a tensor ... for ounce a
> "traditional" method (that probably uses vectorization in back stage)
> is faster than the norm function ...
>
> Paul
>
> mode(0);
>
> A= [ 1 2 3 ; 4 5 6; 7 8 9]
>
> n= 1000
>
> fori = 1 : n
>
> for j = 1 : n
>
> B(i,j) = i*j;
>
> end
>
> end
>
> /// Scilab function/
>
> _tic_();
>
> _norm_(B)
>
> t1= _toc_()
>
> /// "traditional" method/
>
> /// norm = sqrt(trace(A_transp * A))/
>
> _tic_
>
> norm_= (_trace_(B'*B))**0.5
>
> t2= _toc_()
>
>
Hi
Yep, same result for me, the handmade computation is 4 times faster.
Maybe norm i written assuming B is a complex hypermatrix or something.
But the real improvement would be to use a "vectorized" code to generate
B, try this:
tic
n= 1000
fori = 1 : n
for j = 1 : n
B(i,j) = i*j;
end
end
toc
tic
BB=(1:n)'*(1:n);
toc
the second method is several hundred times faster than the first.
Note that the first method uses loops when matrix computations are able
to do the job, and, worst, B is not initialized.
This means that every while, scilab will notice that B is larger than
expected, and will ask for a new, larger place in memory to store B,
will copy the existing B from the old place to the new one, only to find
out later that B is actually even bigger.
I do not know how exactly this is implemented, but this can happen
basically for each new value of i, so 1000 time.
The take away message is: when having to building a matrix with a loop,
"initailize" your matrix:
tic
n= 1000
fori = 1 : n
for j = 1 : n
Bad(i,j) = i*j;
end
end
bad=toc()
tic
Good = zeros(n,n);
n= 1000
fori = 1 : n
for j = 1 : n
Good(i,j) = i*j;
end
end
good=toc()
bad/good
//(in my PC this is already 3x faster)
tic
best=(1:n)'*(1:n);
best=toc()
bad/best
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20120926/ee4e561b/attachment.htm>
More information about the users
mailing list