Search All of the Math Forum:

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

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

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

 Messages: [ Previous | Next ]
 Dana DeLouis Posts: 107 Registered: 12/14/08
Re: non optimized inner for loops
Posted: Nov 25, 2012 11:38 PM

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]
>
> ]
>
>
>
> ]]
>
> ]

Date Subject Author
11/25/12 Dr. Peter Klamser
11/25/12 Dana DeLouis