Re: Array from for-loop iterations
- To: mathgroup at smc.vnet.net
- Subject: [mg116885] Re: Array from for-loop iterations
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Thu, 3 Mar 2011 05:58:52 -0500 (EST)
On 3/2/11 at 4:33 AM, lt648 at hszk.bme.hu (Lengyel Tamas) wrote:
>I am tackling a simple problem,
>I have written a simple for-loop using elements from an array of
>3-dimensional vectors:
>f0=0.5; For[k = 1, k < 9, k++,
>(vec[[k, 3]] - f0)^2 + (vec[[k, 1]] - f0) (vec[[k, 2]] - vec[[k,
>1]]) -
>vec[[k, 2]] - f0) (vec[[k, 3]] - f0)
>]
>I don't know how to make an array out of the computed results.
I assume what you want is the result of what is being computed
in the For loop. You have a computation but do not assign the
result to anything. Consequently, there is nothing to make an
array from. The return value from a For loop is Null.
If you insist on using a For loop, the value you want can be
obtained as follows:
generate some data:
In[11]:= vec = RandomInteger[10, {8, 3}];
define an array for the result:
In[12]:= res = Table[0, {9}];
Use a For loop to compute what you want:
In[13]:= For[k = 1, k < 9, k++,
res[[k]] = (vec[[k, 3]] - f0)^2 + (vec[[k, 1]] - f0) (vec[[k,
2]] -
vec[[k, 1]]) vec[[k, 2]] - f0 (vec[[k, 3]] - f0)]
And now to see the result:
In[14]:= res
Out[14]= {0.,145.5,-22.5,-67.5,52.5,-52.5,-26.5,-73.5,0}
But an explicit loop isn't needed. That is the result can be
computed by doing:
In[15]:= (vec[[All, 3]] - f0)^2 + (vec[[All, 1]] -
f0) (vec[[All, 2]] - vec[[All, 1]]) vec[[All, 2]] -
f0 (vec[[All, 3]] - f0)
Out[15]= {0.,145.5,-22.5,-67.5,52.5,-52.5,-26.5,-73.5}
And when explicit loops are needed, it is almost always better
to use Table rather than For. You could use Table to do the
computation as follows:
In[16]:= Table[(vec[[k, 3]] - f0)^2 + (vec[[k, 1]] -
f0) (vec[[k, 2]] - vec[[k, 1]]) vec[[k, 2]] -
f0 (vec[[k, 3]] - f0), {k, 8}]
Out[16]= {0.,145.5,-22.5,-67.5,52.5,-52.5,-26.5,-73.5}