2012-01-02 17 views
5

C'è un modo per rendere MatrixForm visualizzare un vettore di riga orizzontalmente sulla linea e non in verticale come per i vettori di colonna? Come questo mi confonde a volte. Pensi che sarà difficile scrivere wrapper attorno alla matrice per regolare questo comportamento?Come rendere MatrixForm visualizzare la riga orizzontalmente come un vettore di riga reale e non verticalmente come vettore di colonna?

Ad esempio, ecco una matrice 2 per 2. Le righe vengono visualizzate come le colonne. Entrambi sono mostrati in verticale.

enter image description here

Domanda: E 'possibile fare MatrixForm visualizzazione vettori riga disposti in orizzontale e non in verticale?

Scusate se è stato chiesto prima, una ricerca rapida non mostra nulla.

grazie

aggiornamento (1)

cronaca, questo è in Matlab, stampa righe orizzontalmente e verticalmente colonna automaticamente, speravo in qualcosa di simile. Ma userò il suggerimento di Heike qui sotto per ora in quanto risolve questo al costo di una piccola digitazione in più.

enter image description here

aggiornamento (2) Utilizzando la soluzione Ilderico è bello anche, ho sempre avuto difficoltà a stampa a matrice 3D in un senso che posso leggerlo. Qui si usa ora l'{} trucco

enter image description here

+4

'MatrixForm [twoRowsMatrix [[1, All]], TableDirections -> Row]' dovrebbe funzionare. – Heike

+0

@ Ciao, grazie! questo aiuta Vorrei che MatrixForm lo scoprisse da solo, ma immagino che sarebbe difficile. Dal momento che gli passa una lista, non sa se è un vettore riga o un vettore colonna! Immagino di dover aggiungere questa opzione ora ogni volta che so che cosa sto stampando è una riga. Questo aiuto – Nasser

risposta

6

Sia arrayname[[All,1]] e arrayname[[1,All]], Part fornisce un vettore, e MatrixForm non ha modo di determinare quale "orientamento" che ha. Di conseguenza, stampa sempre i vettori come colonne.

Circa l'unica cosa che puoi fare è fornire una propria routine di uscita per vettori riga, ad esempio, avvolgendolo in un elenco che racchiude, convertendolo di nuovo ad un (sola riga) a matrice:

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

Spetta a te ricordare se un vettore provenisse da una riga o da una colonna.

+0

Per "l'unica cosa che puoi fare", leggi "l'unico era che so come farlo". Grazie per le informazioni su "TableDirections", Heike. Probabilmente userò ancora le funzioni di aiuto, ma questo consente di risparmiare il rewrapping della riga. –

+0

+1, mi piace la tua soluzione, è semplice aggiungere un extra '{}' quando necessario. Ho anche provato a stampare la matrice 3D e stampo la matrice 3D nel modo in cui mi piace ora, dove prima era confusa. Vedi modifica (2). – Nasser

5

Oppure si può semplicemente cucinare la propria funzione RowForm, ad es .:

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

Poi

RowForm[twoRowsMatrix[[All,1]]] 

sembra tipo di o.k.

In alternativa, se si ha realmente a cuore solo i vettori che visualizzano, si potrebbe fare:

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, buona soluzione, ma in realtà non si dovrebbe prendere l'abitudine di utilizzare la prima lettera di UpperCase per le funzioni definite dall'utente. qualcuno che osserva la funzione RowForm nel codice potrebbe pensare che sia una funzione incorporata. – Nasser

0

Se non vi interessa circa la parte (), allora si può accodare con ,{}, avvolgere tra parentesi graffe, e utilizzare TableForm o Grid invece:

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

Quando ho preoccupati per questo, io uso {{a, b, c}} per specificare una fila di a, b, c (che può essere qualsiasi tipo di lista) e trasporre [{{a, b, c}}] per specificare una colonna di 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] 
Problemi correlati