【问题标题】:For loop output to a list mathematicaFor循环输出到列表mathematica
【发布时间】:2013-05-18 02:02:02
【问题描述】:

我似乎无法将这个混乱的输出放入列表中,我知道代码很糟糕,但它可以工作。它从循环的每次迭代中获取一个值,我需要这个输出作为列表。我可以手动完成,但有 1000 多个值会很痛苦……在此先感谢您的帮助。

For[r = 1, r <= 5, r++, 

 draws = 1000;
 FredList = 
  Reap[For[i = 1, i <= draws, i++, 
     Sow[RandomSample[Join[Table["a", {16}], Table["b", {16}]], 
       2]]];][[2, 1]];
 tally = Tally[FredList];
 Sort[tally][[All, 2]];
 rules = Rule @@@ tally;
 {{"a", "a"}, {"b", "b"}, {"b", "a"}, {"a", "b"}} /. rules;
  Plotpoints = {{"a", "a"}, {"b", "b"}, {"b", "a"}, {"a", "b"}} /. 
  rules; Print[Plotpoints[[1]]]]

【问题讨论】:

    标签: list loops for-loop wolfram-mathematica output


    【解决方案1】:

    您可以使用 Sow and Reap(或 AppendTo 等其他列表工具)代替打印:

    Reap[For[r = 1, r <= 5, r++, draws = 1000;
        FredList = Reap[For[i = 1, i <= draws, i++, 
        Sow[RandomSample[Join[Table["a", {16}], Table["b", {16}]],2]]];][[2, 1]];
        tally = Tally[FredList];
        (*Honestly, I don't understand the effect of this Sort here*)Sort[tally][[All, 2]];
        rules = Rule @@@ tally;
        {{"a", "a"}, {"b", "b"}, {"b", "a"}, {"a", "b"}} /. rules;
        Plotpoints = {{"a", "a"}, {"b", "b"}, {"b", "a"}, {"a", "b"}} /.rules;
        Sow[Plotpoints[[1]]]
    ]][[2, 1]]
    

    【讨论】:

      【解决方案2】:

      只需将Table 用于外循环即可。

      With[{draws = 1000, maxr = 5, 
        pop = Join @@ (ConstantArray[#, 16] & /@ {"a", "b"})}, 
       Table[
        Count[Table[RandomSample[pop, 2], {draws}],
         {"a", "a"}], 
        {maxr}]
       ]
      

      【讨论】:

      • 感谢您的回复,您能解释一下第二行的作用吗?再次感谢!
      • @User,生成16个“a”和16个“b”的列表(向量)。
      • 我的代码从一组 16 和 16b 中生成 a 和 b 的序列,而不替换两次绘制,然后替换 a 和 b 并重复 1000 次。绘制的第一个和第二个字母之间存在依赖关系,您的代码会因为它使用 randomSample 做同样的事情吗?还是它是由 16 和 16b 组成的随机列表? - 对不起,如果这很乏味,你的代码要好得多我正在努力更好地理解它..
      • @user2372443,您的代码也使用了 RandomSample。基本上,我只是将Join[Table["a", {16}], Table["b", {16}]] 替换为pop,其中pop 的构造方式类似,即16 个“a”的列表后跟16 个“b”。我这样做的原因是因为您的代码每次迭代内部循环时都会生成相同的列表(这是一种浪费,因为列表是相同的)。之后,我从该列表中随机选择 2 个,然后计算“a”、“a”对出现了多少次。我认为这就是您在代码中所做的。这可能不是你想做的。
      • 感谢您的回复,当我运行它时,您的代码与我的结果截然不同,但速度要快得多..再次感谢您的帮助
      猜你喜欢
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2018-12-15
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多