Drexel dragonThe Math ForumDonate to the Math Forum



Search All of the Math Forum:

Views expressed in these public forums are not endorsed by Drexel University or The Math Forum.


Math Forum » Discussions » Software » comp.soft-sys.math.mathematica

Topic: non optimized inner for loops
Replies: 2   Last Post: Nov 25, 2012 11:38 PM

Advanced Search

Back to Topic List Back to Topic List Jump to Tree View Jump to Tree View   Messages: [ Previous | Next ]
Dana DeLouis

Posts: 107
Registered: 12/14/08
Re: non optimized inner for loops
Posted: Nov 25, 2012 11:38 PM
  Click to see the message monospaced in plain text Plain Text   Click to reply to this topic Reply


Hi. I don't have any great solutions, but here's just an observation.

> For[k = 1, k < limit4 + 1, k++,
> zz = 1/2 (mat8[[i, j, k, 1]] + mat8[[i, j, k, 2]]);


In this loop, you are calculating the Mean for All k's, and the data in 1 & 2 (who's dimension is also 2, or ALL)
You could pull this out of the loop, and do it in 1 calculation:

zz = Mean /@ mat8[[i,j, All, All]]


> For[k = 1, k < limit4 + 1, k++,
> zz = 1/2 (mat8[[i, j, k, 1]] + mat8[[i, j, k, 2]]);
> mat9[[n, i, j, k]] = {mat5[[n, i, j, 1]] + zz*mat5[[n, i, j, 4]],
> mat5[[n, i, j, 2]] + zz*mat5[[n, i, j, 5]],
> mat5[[n, i, j, 3]] + zz*mat5[[n, i, j, 6]]};



The above is hard to follow, so here's just a general idea.
For mat9, it appears the data on the right is constant during the loop for All k's.

In this small example, we change the value of the last index (ie your k) with the sum of the first two numbers

m=RandomInteger[{1,9},{3,2,2,3}]

{{{{2,3,7},{4,9,7}},{{4,7,1},{3,7,4}}},{{{3,2,8}, << removed for display >>


m[[All,All,All,-1]]=m[[All,All,All,1]]+m[[All,All,All,2]];

m
{{{{2,3,5},{4,9,13}},{{4,7,11},{3,7,10}}},{{{3,2,5}, << removed for display >>

The 5 is the sum 2+3, 13 is 4+9, etc.

This was done without a For loop.
See if any ideas above will help.

Good Luck
= = = = = = = = = =
HTH :>)
Dana DeLouis
Mac & Mathematica 8
= = = = = = = = = =




On Wednesday, November 21, 2012 8:03:03 PM UTC-5, Sasa B wrote:
> Hi everyone. I have one, probably horrible non-optimized part of code,
>
> which I would like to speed up. I have put all matrices to be RandomReal,
>
> but in my code they take specific values.
>
>
>
> All the best,
>
> Aleksandar
>
>
>
>
>
> limit1 = 10;
>
> limit2 = 20;
>
> limit3 = 10;
>
> limit4 = 15;
>
> mat1 = RandomReal[{-100, 100}, {limit3, 2}];
>
> mat2 = RandomReal[{-100, 100}, {limit1, limit2, limit3, 2}];
>
> mat3 = Table[
>
> Sin[m*\[Pi]*y] + Cos[s*\[Pi]*y], {m, limit2}, {s, limit3}];
>
> mat4 = Table[
>
> Sin[m*s*\[Pi]*y] + Cos[s*\[Pi]*y], {m, limit2}, {s, limit3}];
>
> mat5 = RandomReal[{-100, 100}, {limit1, limit2, limit3, 6}];
>
> mat6 = Table[
>
> Sin[m*m*\[Pi]*y] + Cos[s*\[Pi]*y], {m, limit2}, {s, limit3}];
>
> mat7 = Table[
>
> Sin[m*\[Pi]*y] + Cos[s*s*\[Pi]*y], {m, limit2}, {s, limit3}];
>
> mat8 = RandomReal[{-100, 100}, {limit2, limit3, limit4, 2}];
>
> mat9 = RandomReal[{-100, 100}, {limit1, limit2, limit3, limit4}];
>
> mat10 = RandomReal[{-100, 100}, {limit1, limit2, limit3, limit4}];
>
> mat11 = RandomReal[{-100, 100}, {limit1, limit2, limit3, limit4}];
>
>
>
> For[n = 1, n < limit1 + 1, n++,
>
> For[i = 1, i < limit2 + 1, i++,
>
>
>
> For[j = 1, j < limit3 + 1, j++,
>
>
>
> y = (mat1[[j, 1]] + mat1[[j, 2]])/2*d1;
>
>
>
> mat2[[n, i, j, 1]] = mat3[[i, j]];
>
>
>
> mat2[[n, i, j, 2]] = mat4[[i, j]];
>
>
>
> mat5[[n, i, j, All]] = 1/2 (mat6[[i, j]] + mat7[[i, j]]);
>
>
>
> Clear[y];
>
>
>
> For[k = 1, k < limit4 + 1, k++,
>
>
>
> zz = 1/2 (mat8[[i, j, k, 1]] + mat8[[i, j, k, 2]]);
>
>
>
> mat9[[n, i, j, k]] = {mat5[[n, i, j, 1]] + zz*mat5[[n, i, j, 4]],
>
> mat5[[n, i, j, 2]] + zz*mat5[[n, i, j, 5]],
>
> mat5[[n, i, j, 3]] + zz*mat5[[n, i, j, 6]]};
>
>
>
> mat10[[n, i, j, k]] = mat11[[n, i, j, k]].mat9[[n, i, j, k]];
>
>
>
> Clear[zz]
>
> ]
>
>
>
> ]]
>
> ]













Point your RSS reader here for a feed of the latest messages in this topic.

[Privacy Policy] [Terms of Use]

© Drexel University 1994-2014. All Rights Reserved.
The Math Forum is a research and educational enterprise of the Drexel University School of Education.