2012-01-02 16 views
5

¿Hay alguna manera de hacer que MatrixForm muestre un vector de fila horizontalmente en la línea y no verticalmente como lo hace para los vectores de columna? Como esto me confunde a veces. ¿Crees que será difícil escribir un envoltorio alrededor de la matriz para ajustar este comportamiento?¿Cómo hacer que MatrixForm muestre la fila horizontalmente como un vector de fila real y no verticalmente como un vector de columna?

Por ejemplo, aquí hay una matriz de 2 por 2. Las filas muestran lo mismo que las columnas. Ambos se muestran verticales.

enter image description here

Pregunta: ¿Es posible hacer vectores fila MatrixForm de visualización establecidos en horizontal y no verticalmente?

Lo siento si esto se le preguntó antes, una búsqueda rápida no muestra nada.

gracias

actualización (1)

FYI, esto es en Matlab, imprime filas horizontalmente y verticalmente la columna de forma automática, que estaba esperando algo como esto. Pero voy a usar la sugerencia de Heike a continuación por ahora, ya que resuelve esto a costa de un pequeño tipeo extra.

enter image description here

actualización (2) Utilizando la solución Hilderico es agradable también, siempre he tenido dificultades para impresión matricial 3D de una manera que pueda leerlo. Aquí se utiliza ahora el {} truco

enter image description here

+4

'MatrixForm [twoRowsMatrix [[1, All]], TableDirections -> Row]' debería funcionar. – Heike

+0

@Heike, gracias! eso ayuda. Me gustaría que MatrixForm lo resolviera solo, pero creo que sería difícil. ¡Desde que le pasó una lista, no sabe si es un vector de fila o un vector de columna! Creo que solo tengo que agregar esta opción ahora que sé que lo que estoy imprimiendo es una fila. Esta ayuda – Nasser

Respuesta

6

Por tanto arrayname[[All,1]] y arrayname[[1,All]], Part entrega un vector, y MatrixForm no tiene manera de determinar qué "orientación" que tiene. En consecuencia, siempre imprime vectores como columnas.

Sobre la única cosa que puede hacer es proporcionar su propia rutina de salida de vectores fila, por ejemplo, envolviéndolo en una lista de cerramiento, convirtiéndola de nuevo a una (sola fila) de la matriz:

rowVector[a_List] := MatrixForm[{a}] 
columnVector = MatrixForm (*for symmetry*) 

Depende de usted, sin embargo, recordar si un vector provino de una fila o una columna.

+0

Para "lo único que puedes hacer", lee "lo único que sé es cómo hacerlo". Gracias por la información sobre 'TableDirections', Heike. Probablemente aún use funciones auxiliares, pero esto ahorra el reenvío de la fila. –

+0

+1, me gusta su solución, es fácil simplemente agregar un '{}' extra cuando sea necesario. También traté de imprimir matrices tridimensionales e imprimo la matriz tridimensional como a mí me gusta ahora, antes era confusa. Por favor vea editar (2). – Nasser

5

O simplemente puede cocinar su propia función RowForm, por ejemplo .:

RowForm[(m_)?VectorQ] := Row[{"(",Row[m," "], 
    ")"}, "\[MediumSpace]"]; 

Entonces

RowForm[twoRowsMatrix[[All,1]]] 

parece un poco visto bueno

Alternativamente, si en realidad sólo se preocupa por vectores que muestran, se puede hacer:

twoRowsMatrix = {{a11, a12}, {a21, a22}}; 

TakeColumn[m_?MatrixQ, i_] := (Print[MatrixForm[#]]; #) &@m[[All, i]]; 
TakeRow[m_?MatrixQ, i_] := (Print[MatrixForm[{#}]]; #) &@m[[i]]; 
TakeColumn[twoRowsMatrix, 1] 
TakeRow[twoRowsMatrix, 1] 
+0

+1, buena solución, pero no debería tener el hábito de utilizar la primera letra de UpperCase para las funciones definidas por el usuario. alguien que mira la función RowForm en el código podría pensar que es una función incorporada. – Nasser

0

Si no se preocupan por la parte (), a continuación, puede añadir con ,{}, envuelva entre llaves, y utilizar TableForm o Grid lugar:

vec = {x, y, z}; 
TableForm[{vec, {}}] 
Grid[{vec, {}}] 
0

Cuando llego preocupado por esto, utilizo {{a, b, c}} para especificar una fila de a, b, c (que puede ser cualquier tipo de lista) y Transpose [{{a, b, c}}] para especificar una columna de a, b, c.

MatrixForm[a = RandomInteger[{0, 6}, {2, 2}]] 
MatrixForm[b = RandomInteger[{0, 6}, {2, 2}]] 
MatrixForm[c = RandomInteger[{0, 6}, {2, 2}]] 
w = {a, b, c}; 
MatrixForm[w] 
w = {{a, b, c}}; 
MatrixForm[w] 
w = Transpose[{{a, b, c}}]; 
MatrixForm[w] 
Cuestiones relacionadas