2011-02-11 22 views
5

Parece que debería ser un pedazo de pastel, pero no encontré la respuesta en la documentación de Mathematica. Supongamos que tengo dos listas separadas, por ejemplo x = {1,2,3,4,5} y y = {1,4,9,16,25}. Quiero dar formato a estas listas como una tabla con cada lista como una columna, de esta manera:¿Cómo formatear dos listas separadas en columnas, en lugar de filas en Mathematica?

x y 
1 1 
2 4 
3 9 
4 16 
5 25 

Pero si lo hago TableForm [x, y], consigo sólo la primera columna, de esta manera:

1 
2 
3 
4 
5 

Si hago cuadrícula [{x, y}], me sale una mesa, pero con formato de filas en lugar de columnas, así:

1 2 3 4 5 
1 4 9 16 25 

Ahora, si tengo mis valores como {x, y} pares, en lugar de listas separadas, entonces puedo obtener casi lo que quiero, así:

Input: Table[{n,n^2},{n,1,5}]//TableForm 

Output: 
1 1 
2 4 
3 9 
4 16 
5 25 

digo casi , porque me gustaría tener los nombres de las variables en la parte superior de cada columna, y me gustaría las columnas justificadas de manera que las los dígitos se colocan siempre verticalmente en el "lugar de las unidades", los dígitos de las decenas en el "lugar de las decenas", etc.

Así que volviendo a mi pregunta: si tengo dos listas separadas de la misma longitud, ¿cómo puedo formatear? ellos como una tabla de columnas? Revisé la documentación de MMA para Grid y TableForm, pero no pude encontrar la forma de hacerlo. ¿Me he perdido algo? Si no hay una manera directa de hacerlo, ¿hay alguna manera de transformar dos listas separadas en pares de valores que luego podrían formatearse en columnas utilizando TableForm?

Gracias por cualquier sugerencia que pueda tener.

+0

Permítanme darles la bienvenida a StackOverflow y recordar tres cosas que normalmente hacemos aquí: 1) Al recibir ayuda, trate de darle demasiado ** ** responder a las preguntas en su área de especialización 2) ['Lea las preguntas frecuentes'] (http://tinyurl.com/2vycnvr) 3) Cuando vea buenas preguntas y respuestas, vote por ellas [' usando los triángulos grises'] (http://i.imgur.com/kygEP) .png), ya que la credibilidad del sistema se basa en la reputación que obtienen los usuarios al compartir su conocimiento. Recuerde también aceptar la respuesta que mejor resuelva su problema, si lo hubiera, ['presionando el signo de la marca de verificación '] (http://i.imgur.com/uqJeW.png) –

+0

Sin embargo, debe seleccionar una respuesta, una tarea que muchas veces requiere explicar su elección. Lea las preguntas frecuentes.Si no selecciona uno, está dando a entender que ninguna respuesta satisface sus necesidades. –

+0

@belisarius De alguna manera me perdí tu último comentario hasta ahora. He (belatedely!) He seleccionado una "mejor" respuesta. Sin embargo, animo a los lectores de esta pregunta que están aprendiendo Mathematica a echar un vistazo a algunas de las otras respuestas, ya que cada una agregará algo a su comprensión de cómo funcionan Grid y Tableform. – eipi10

Respuesta

6

personalmente prefiero Grid para TableForm. Tal vez algo como esto?

algunos preliminares:

x = {1, 2, 3, 4, 5}; 
y = {1, 4, 9, 16, 25}; 
grid = [email protected]{x, y}; 
headings = {{Item["x", Frame -> {True, True}], 
    Item["y", Frame -> {True, False}]}}; 

El siguiente código,

Grid[Join[headings, grid], Alignment -> Right, Dividers -> All, 
Spacings -> {3, 1}, FrameStyle -> Orange] 

da esto como salida, por ejemplo:

enter image description here

7

A menudo, en Mathematica, utiliza Transpose para cambiar la función de fila y columna.

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 
3
Grid[Transpose[{x, y}], Alignment -> Right] 

enter image description here

4

En lugar de utilizar Transpose puede utilizar la Opción 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

+0

Gracias Simon. Ni siquiera estaba al tanto de la opción TableDirections. – eipi10

2

yo usaría:

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

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

enter image description here


Éstos son algunos ejemplos más complicadas, lo que demuestra las obras TableForm manera. Se vuelve complicado, y generalmente tengo que experimentar un poco para obtener lo que quiero.

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

+0

¡No alinea los números a la derecha! –

+0

¡Agradable! Pude alinearlo a la derecha de la siguiente manera: TableForm [{{x, y}}, TableAlignments-> Right]. Pregunta: ¿Por qué agregar un par adicional de paréntesis cambia el resultado de las filas a las columnas? – eipi10

+0

@belisarius Creo que no pude comprender ese requisito. @ eipi10, TableForm cambia la dirección en cada nivel de los datos. ¿Es apropiado editar mi publicación para agregar ejemplos? –

Cuestiones relacionadas