Как отформатировать два отдельных списка в столбцах, а не в строках Mathematica? - PullRequest
5 голосов
/ 11 февраля 2011

Похоже, это должно быть просто, но я не нашел ответа в документации 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  

Если я сделаю Grid [{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  

Я говорю почти , потому что я хотел бы, чтобы имена переменных были вверху каждого столбца, и я хотел бы, чтобы столбцы были выровнены так, чтобы эти цифры всегда располагались вертикально в одно место », десятки в десятке и т. д.

Итак, вернемся к моему вопросу: если у меня есть два отдельных списка одинаковой длины, как я могу отформатировать их в виде таблицы столбцов? Я проверил документацию MMA для Grid и TableForm, но я не смог найти способ сделать это. Я что-то пропустил? Если нет прямого способа сделать это, есть ли способ преобразовать два отдельных списка в пары значений, которые затем можно отформатировать в столбцах с помощью TableForm?

Спасибо за любые ваши предложения.

Ответы [ 5 ]

7 голосов
/ 11 февраля 2011

Часто в Mathematica вы используете Транспонирование для переключения роли строки и столбца.

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
6 голосов
/ 11 февраля 2011

Лично я предпочитаю Grid 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]

дает это в качестве вывода, например:

enter image description here

4 голосов
/ 12 февраля 2011

Вместо использования Transpose вы можете использовать параметр TableDirection:

x={1,2,3,4,5};y={1,4,9,16,25};
TableForm[{x,y},TableDirections->Row,TableHeadings->{{"x","y"}}]

a table without legs, but with a head

3 голосов
/ 11 февраля 2011
 Grid[Transpose[{x, y}], Alignment -> Right]  

enter image description here

2 голосов
/ 16 февраля 2011

Я бы использовал:

x = {1, 2, 3, 4, 5};
y = {1, 4, 9, 16, 25};

TableForm[{{x, y}}, TableAlignments -> Right]

enter image description here


Вот еще несколько запутанных примеров, демонстрирующих работу TableForm.Это действительно сложно, и мне обычно приходится немного экспериментировать, чтобы получить то, что я хочу.

a = {1, 2, 3};
b = {4, 5, 6};

{a, b} // TableForm

enter image description here

{{a}, {b}} // TableForm

enter image description here

{{{a}}, {{b}}} // TableForm

enter image description here

{{{a}, {b}}} // TableForm

enter image description here

{{List /@ a, List /@ b}} // TableForm

enter image description here

{{a}, b} // TableForm

enter image description here

{{{a}, b}} // TableForm

enter image description here

{{{a}}, {b}} // TableForm

enter image description here

{{{{a}}, {b}}} // TableForm

enter image description here

...