Как сохранить данные из каждого цикла в виде массива или таблицы? - PullRequest
1 голос
/ 16 декабря 2011
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]]]

Я хочу сохранить данные из каждого цикла в виде массива или таблицы. Как я могу это сделать?

Ответы [ 2 ]

8 голосов
/ 16 декабря 2011

Попробуйте использовать Table вместо двух For петель.Возвращает список списков результатов (матрица в основном)

Table[
 abc = doc[[n]];
 kk = doc[[m]];
 v = vector[abc, kk];
 vl = VectorLength[v], {n, 1, 5}, {m, 1, 5}]
4 голосов
/ 16 декабря 2011

Мне не понятно, какие данные вы хотите сохранить, но общий способ сделать это - использовать Sow и 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]]

Это сохраняет каждое значение v = vector[abc, kk].Part извлечение [[2, 1]] возвращает только этот список.

Если вы хотите сохранить несколько наборов данных, вы можете использовать теги в 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"]
 ]]
]

Здесь я опускаюPart добыча.Выходные данные находятся в {body, {{data1, ...}, {data2, ...}}}, где body - любой вывод самого выражения (Null в случае For).Наборы данных отображаются в том порядке, в котором они были впервые посеяны.Вы можете получить явный порядок наборов с другим аргументом Reap следующим образом:

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

Дополнительные сведения см. В документации по Reap.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...