Re: Speed of dot product in Mathematica

• To: mathgroup at smc.vnet.net
• Subject: [mg5317] Re: [mg5230] Speed of dot product in Mathematica
• From: carlos at mars.Colorado.EDU (Carlos A. Felippa)
• Date: Wed, 27 Nov 1996 01:47:35 -0500
• Organization: University of Colorado, Boulder
• Sender: owner-wri-mathgroup at wolfram.com

```In article <56p225\$m3c at dragonfly.wolfram.com> BobHanlon at aol.com writes:
>You can also use
>
>Plus @@ (a b)
>
>If you want the dot product of portions of the factors, use only the
>portions.  For example,
>
>Take[a, {100, 1000}].Take[b, {200, 1100}]
>
>

Of course I use Take where possible. The following skyline
factorization module is an example.

SymmSkyMatrixFactor[S_,tol_]:= Module[
{p,a,fail,i,j,k,l,m,n,ii,ij,jj,jk,jmj,d,s,row,v},
row=SymmSkyMatrixRowLengths[S]; s=Max[row];
{p,a}=S; n=Length[p]-1; v=Table[0,{n}]; fail=0;
Do [jj=p[[j+1]]; If [jj<0|row[[j]]==0, Continue[]]; d=a[[jj]];
jmj=Abs[p[[j]]]; jk=jj-jmj;
Do [i=j-jk+k; v[[k]]=0; ii=p[[i+1]];
If [ii<0, Continue[]]; m=Min[ii-Abs[p[[i]]],k]-1;
ij=jmj+k; v[[k]]=a[[ij]];
v[[k]]-=Take[a,{ii-m,ii-1}].Take[v,{k-m,k-1}];
a[[ij]]=v[[k]]*a[[ii]],
{k,1,jk-1}];
d-=Take[a,{jmj+1,jmj+jk-1}].Take[v,{1,jk-1}];
If [Abs[d]<tol*row[[j]], fail=j; a[[jj]]=Infinity; Break[] ];
a[[jj]]=1/d,
{j,1,n}];
Return[{{p,a},fail}]
];

However, the dot product cannot always be done using unit strides
in both arrays, and use of Sum, Do or For exert big speed penalties.
To overcome that problem I once tried the form

but that was rejected as illegal.   It seems an unreasonable
restriction for the Take function.

```

• Prev by Date: maple -> mathematica software?
• Next by Date: Re: Formatting Output
• Previous by thread: Re: Speed of dot product in Mathematica
• Next by thread: Re: SeedRandom oddity/flaw/bug/imperfection