【问题标题】:Setting up a Counter in a Table在表中设置计数器
【发布时间】:2011-09-06 10:21:53
【问题描述】:

我有两个问题,

第一季度。 代码如下:

orgtable = Table[{i, node2 = i + 1, node3 = node2 + 6, node4 = node3 - 1, 
                     node5 = i + 18, node6 = node5 + 1, node7 = node6 + 6, 
                     node8 = node7 - 1}, {i, 1, 36}
           ];
modtable = Drop[orgtable, {6, 36, 6}];
finaltable = With[{n = 5, m = 10},Flatten[Partition[modtable, n, n + m, 1, {}], 1]]

第一段代码给了我一个原始表格,第二段给了我一个修改过的表格,第三段产生了最终表格。 决赛桌的输出如下所示:

{{1, 2, 8, 7, 19, 20, 26, 25},    {2, 3, 9, 8, 20, 21, 27, 26}, 
 {3, 4, 10, 9, 21, 22, 28, 27},   {4, 5, 11, 10, 22, 23, 29, 28},
 {5, 6, 12,11, 23, 24, 30, 29},   {19, 20, 26, 25, 37, 38, 44,43},
 {20, 21, 27,26, 38, 39, 45, 44}, {21, 22, 28, 27, 39, 40, 46, 45},
 {22, 23, 29,28, 40,41, 47, 46},  {23, 24, 30, 29, 41, 42, 48, 47}}

但我希望它为决赛桌设置一个计数器,这样我的输出应该如下所示:计数器将增加 1,在下面的示例中,它将从 200 开始;

{{200,1, 2, 8, 7, 19, 20, 26, 25}, {201,2, 3, 9, 8, 20, 21, 27, 26},
 {202,3, 4,10, 9, 21,22, 28, 27},  {203,4, 5, 11, 10, 22, 23, 29, 28},
 {204,5, 6, 12,11, 23, 24, 30, 29} and so on

从所需的输出中可以看出,每个元素的计数都会增加一

现在第二个问题:

mycounter = 100;
tryone = 
   TableForm[
     Flatten[
       Table[{++mycounter, xcord, ycord, 
              (150*(Sin[((xcord - 90*2*3.14)/180]^2)*
                   (Sin[((ycord - 45)*2*3.14)/180]^2)
               ) + 20
             }, {xcord, 0, 200, 5}, {ycord, 0, 200, 5}
       ], 1
     ]
   ]

在上面的例子中,我已经成功实现了一个计数器,它从 100 开始并以 1 递增,它给了我一个输出

100 0 0 20.03

101 0 5 20.04 and so on..

但现在我想对此使用Transpose 函数,因为我想转置呈现的值,但同时我不想转置“我的计数器”。

mycounter = 100;
secondtry= 
  TableForm[
    Flatten[
      Transpose[
        Table[{++mycounter, xcord, ycord, 
                (150*(Sin[((xcord - 90)*2*3.14)/180]^2)* 
                     (Sin[((ycord - 45)*2*3.14)/180]^2)
                 ) +20}, {xcord, 0, 200, 5}, {ycord, 0, 200, 5}
        ]
      ], 1
    ]
  ]

但正如您所见,Transpose 函数也会转置我不想要的“mycounter”。 如何防止转置功能在“mycounter”上工作,但在其余部分工作? 也欢迎在上述代码中实现计数器的任何其他想法。

【问题讨论】:

  • @Sjoerd ...你赢得了编辑比赛:)
  • @belisarius 我们不应该得到一个橙色条警告我们正在同时编辑吗?没看到。
  • @Sjoerd 我做到了。但仅在尝试保存编辑时。

标签: list wolfram-mathematica counter nested-lists


【解决方案1】:

删除了第一个问题的答案,因为我可能不明白你想要什么。

关于第二个问题:我不确定我是否完全理解你的意思。如果计数器属于坐标集,则输出应保持原样,看起来有多尴尬。如果计数器列只是最终输出的行计数器,您可以像以前一样在完成展平后放入。

但在这种情况下,Transpose 似乎完全是多余的。切换表索引的顺序就足够了。如果您这样做,您可以保持柜台原样:

mycounter = 100;
secondtry = 
  Flatten[
    Table[{mycounter++, xcord,ycord, 
          (150*(Sin[((xcord - 90)*2*3.14)/180]^2)*
               (Sin[((ycord - 45)*2*3.14)/180]^2)
          ) + 20}, 
          {ycord,0, 200, 5}, {xcord, 0, 200, 5} (* order switched here *)
    ], 1
  ]

一些注意事项:我从您的作业中删除了TableForm。这通常仅用于打印,而不用于分配给变量的数据。如果您想做一个作业并希望同时查看结果,您可以尝试类似

 (myVar = Table[...{...},{...}] ) //TableForm

另请注意,您不必乘以 3.14/180 即可将度数转换为弧度。 Mathematica 有一个名为 Degree 的内置量(如果你使用快捷键 esc deg esc 你会得到一个很好的度数符号)。看起来您正在乘以 2 pi/180 进行此转换。如果这是你的意图,那是不正确的。转换为 2 pi/360 或 pi/180。然后((xcord - 90)*2*3.14)/180 应该写成(xcord - 90)Degree

【讨论】:

  • 非常感谢...你让我意识到一个重大错误
【解决方案2】:

问题 1:

Transpose[Prepend[Transpose[#], Range[Length[#]] + 200]] &@
 {{1, 2, 8, 7, 19, 20, 26, 25}, {2, 3, 9, 8, 20, 21, 27, 26}, {3, 4, 
   10, 9, 21, 22, 28, 27}, {4, 5, 11, 10, 22, 23, 29, 28}, {5, 6, 12, 
   11, 23, 24, 30, 29}, {19, 20, 26, 25, 37, 38, 44, 43}, {20, 21, 27,
    26, 38, 39, 45, 44}, {21, 22, 28, 27, 39, 40, 46, 45}, {22, 23, 
   29, 28, 40, 41, 47, 46}, {23, 24, 30, 29, 41, 42, 48, 47}}

问题2:

Function[mat, 
  Partition[
   Transpose[Prepend[Transpose[#], Range[Length[#]] + 99]] &@
    Flatten[mat, 1], Length[mat]]]@
 Table[{xcord, 
   ycord, (150*(Sin[((xcord - 90)*2*3.14)/
          180]^2)*(Sin[((ycord - 45)*2*3.14)/180]^2)
     ) + 20
   }, {xcord, 0, 200, 50}, {ycord, 0, 200, 50}
  ]

【讨论】:

    【解决方案3】:

    创建没有计数器的表的其余部分,使用Range 创建一个合适的索引矩阵n*1,然后使用MapThread 和内部函数Join 将两者放在一起。

    【讨论】:

      【解决方案4】:

      您的finaltable 也可以使用Tablemodtable 生成,如下所示:

      finaltableAlt = Delete[#, Transpose@{Flatten@Table[i + j, {i, 5, (
                Length[#] - 10), 15}, {j, 10}]}] & @ modtable 
      

      另一种编号的可能性:

      MapIndexed[Flatten@{#2[[1]] + 199, #1} &, finaltableAlt]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-18
        • 1970-01-01
        • 2021-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多