在表中设置计数器

Pro*_*_UK 1 counter wolfram-mathematica list nested-lists

我有两个问题,

Q1.代码如下:

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]]
Run Code Online (Sandbox Code Playgroud)

第一段代码给了我一个原始表,第二段给了我一个修改过的表,第三段给出了最终表.最终表的输出如下所示:

{{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}}
Run Code Online (Sandbox Code Playgroud)

但我想让它设置一个计数器到最终表,以便我的输出看起来像这样(下图):计数器将增加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
Run Code Online (Sandbox Code Playgroud)

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

现在问题二:

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
     ]
   ]
Run Code Online (Sandbox Code Playgroud)

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

100 0 0 20.03

101 0 5 20.04 and so on..
Run Code Online (Sandbox Code Playgroud)

但是现在我想使用这个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
    ]
  ]
Run Code Online (Sandbox Code Playgroud)

但是你可以看到Transpose函数也转换了我不想要的"mycounter".你如何阻止转置功能在"mycounter"上工作,但是对其余的工作呢? 在上述代码中实现计数器的任何其他想法也是受欢迎的.

Sjo*_*ies 5

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

关于第二个问题:我不确定我是否完全理解你.如果计数器属于坐标集,则输出应保持原样,它看起来多么笨拙.如果计数器列只是最终输出的行计数器,则可以像以前一样完成扁平化后放入.

但在这种情况下,似乎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
  ]
Run Code Online (Sandbox Code Playgroud)

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

 (myVar = Table[...{...},{...}] ) //TableForm
Run Code Online (Sandbox Code Playgroud)

另请注意,您不必乘以3.14/180即可将度数转换为弧度.数学有一个名为内置的数量Degree为(如果您使用快捷escesc,你将有一个不错的程度,而不是符号).对于此转换,您似乎乘以2 pi/180.如果这是你的意图,那就错了.转换为2 pi/360或pi/180. ((xcord - 90)*2*3.14)/180应该写成(xcord - 90)Degree.