这似乎应该是小菜一碟,但我没有在Mathematica的文档中找到答案。假设我有两个单独的列表,例如x = {1,2,3,4,5}和y = {1,4,9,16,25}。我想将这些列表格式化为一个表,每个列表都作为一列,如下所示:
x y
1 1
2 4
3 9
4 16
5 25
但如果我做TableForm [x,y],我只得到第一列,如下所示:
1
2
3
4
5
如果我做网格[{x,y}],我得到一个表,但格式化为行而不是列,如下所示:
1 2 3 4 5
1 4 9 16 25
现在,如果我的值为{x,y}对,而不是单独的列表,那么我可以得到几乎我想要的东西,如下所示:
Input: Table[{n,n^2},{n,1,5}]//TableForm
Output:
1 1
2 4
3 9
4 16
5 25
我说差不多,因为我想在每列的顶部都有变量名称,我希望这些列是对齐的,这样一些数字总是垂直放在“一个地方”,“十位”中的十位数等等。
所以,回到我的问题:如果我有两个相同长度的单独列表,我如何将它们格式化为列表?我检查了Grid和TableForm的MMA文档,但我找不到办法。我错过了什么?如果没有直接的方法,有没有办法将两个单独的列表转换为值对,然后可以使用TableForm在列中进行格式化?
感谢你提出的任何建议。
答案 0 :(得分:7)
通常在Mathematica中,您使用Transpose来切换行和列的角色。
In[6]:= x = {1,2,3,4,5}; y = {1,4,9,16,25};
In[7]:= {x,y} // Transpose // TableForm
Out[7]//TableForm= 1 1
2 4
3 9
4 16
5 25
答案 1 :(得分:6)
我个人更喜欢Grid to TableForm。也许是这样的?
一些预赛:
x = {1, 2, 3, 4, 5};
y = {1, 4, 9, 16, 25};
grid = Transpose@{x, y};
headings = {{Item["x", Frame -> {True, True}],
Item["y", Frame -> {True, False}]}};
以下代码,
Grid[Join[headings, grid], Alignment -> Right, Dividers -> All,
Spacings -> {3, 1}, FrameStyle -> Orange]
将此作为输出,例如:
答案 2 :(得分:4)
您可以使用选项Transpose
:
TableDirection
x={1,2,3,4,5};y={1,4,9,16,25};
TableForm[{x,y},TableDirections->Row,TableHeadings->{{"x","y"}}]
答案 3 :(得分:3)
Grid[Transpose[{x, y}], Alignment -> Right]
答案 4 :(得分:2)
我会用:
x = {1, 2, 3, 4, 5};
y = {1, 4, 9, 16, 25};
TableForm[{{x, y}}, TableAlignments -> Right]
以下是一些更复杂的例子,展示了TableForm的工作方式。它确实很复杂,我通常需要进行一些实验才能得到我想要的东西。
a = {1, 2, 3};
b = {4, 5, 6};
{a, b} // TableForm
{{a}, {b}} // TableForm
{{{a}}, {{b}}} // TableForm
{{{a}, {b}}} // TableForm
{{List /@ a, List /@ b}} // TableForm
{{a}, b} // TableForm
{{{a}, b}} // TableForm
{{{a}}, {b}} // TableForm
{{{{a}}, {b}}} // TableForm