user1100792
user1100792

Reputation: 11

how to store the data from each loop into an array or table form?

For[n = 1, n < 6, n = n + 1,
   For[m = 1, m < 6, m = m + 1, abc = doc[[n]];
   kk = doc[[m]];
   v =vector[abc, kk]; 
   vl = VectorLength[v]]]

I want to store the data from each loop into an array or table form. How can I do that?

Upvotes: 1

Views: 6167

Answers (2)

Mr.Wizard
Mr.Wizard

Reputation: 24336

It's not clear to me what data you want to save, but the general way to do this is to use Sow and Reap.

Reap[
  For[n = 1, n < 6, n = n + 1, For[m = 1, m < 6, m = m + 1,
    abc = doc[[n]];
    kk = doc[[m]];
    Sow[v = vector[abc, kk]];
    vl = VectorLength[v]]]
][[2, 1]]

This saves every value of v = vector[abc, kk]. The Part extraction [[2, 1]] returns only this list.

If you want to save multiple data sets, you can use tags within Sow:

Reap[
 For[n = 1, n < 6, n = n + 1, For[m = 1, m < 6, m = m + 1,
   abc = doc[[n]];
   kk = doc[[m]];
   Sow[v = vector[abc, kk], "v"];
   Sow[vl = VectorLength[v], "v1"]
 ]]
]

Here I omit the Part extraction. Output is in the from {body, {{data1, ...}, {data2, ...}}} where body is any output from the expression itself (Null in the case of For). Data sets appear in the order they were first sown to. You can get an explicit order of sets with another argument of Reap as follows:

Reap[
  For[ ... ],
  {"v1", "v"}
]

See the documentation for Reap for more options.

Upvotes: 4

acl
acl

Reputation: 6520

Try using a Table instead of two For loops. It returns a list of lists of the results (a matrix basically)

Table[
 abc = doc[[n]];
 kk = doc[[m]];
 v = vector[abc, kk];
 vl = VectorLength[v], {n, 1, 5}, {m, 1, 5}]

Upvotes: 9

Related Questions