2012-01-02 13 views
5

Czy istnieje sposób, aby MatrixForm wyświetlał wektor wiersza poziomo na linii, a nie w pionie, tak jak ma to miejsce w przypadku wektorów kolumn? To czasami mnie martwi. Czy myślisz, że trudno będzie napisać wrapper do formularza matrycy, aby dostosować to zachowanie?Jak ustawić wiersz MatrixForm poziomo jako wektor wiersza rzeczywistego, a nie pionowo jako wektor kolumnowy?

Na przykład tutaj mamy matrycę 2 na 2. Wiersze wyświetlają się tak samo, jak kolumny. Oba są pokazane pionowo.

enter image description here

Pytanie: Czy jest możliwe, aby MatrixForm wyświetlania wektory wierszy określonymi poziomo i pionowo, nie?

Przepraszam, jeśli wcześniej zapytano, szybkie wyszukiwanie nic nie pokazuje.

dzięki

zmiana (1)

fyi, to jest w Matlab, drukuje wiersze poziomo i pionowo kolumny automatycznie, że liczy na coś takiego. Ale na razie użyję sugestii Heike'a, ponieważ rozwiązuje to kosztem dodatkowego pisania.

enter image description here

Update (2) Stosując rozwiązanie Hilderyk jest również miły, zawsze miałem twardy czas drukowania matrycę 3D w taki sposób, że można go odczytać. Tutaj jest teraz za pomocą {} sztuczkę

enter image description here

+4

'MatrixForm [twoRowsMatrix [[1, All]], TableDirections -> Row]' powinien działać. – Heike

+0

@Heike, dzięki! to pomaga. Chciałbym, żeby MatrixForm sam to wymyślił, ale myślę, że byłoby to trudne. Od momentu przekazania listy nie wie, czy jest to wektor wiersza, czy wektor kolumnowy! Chyba muszę teraz dodać tę opcję, kiedy tylko wiem, co drukuję, to wiersz. Ta pomoc. – Nasser

Odpowiedz

6

Zarówno arrayname[[All,1]] i arrayname[[1,All]], Part dostarcza wektor i MatrixForm nie ma możliwości określenia, które „orientacja” ma. Odpowiednio, zawsze drukuje wektory jako kolumny.

O jedyne co można zrobić, to podać swoje własne procedury wyjściowy dla wektorów rzędu, np owijając go w liście otaczającej, przekształcając go z powrotem do (pojedynczym rzędzie) matryca:

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

Od Ciebie zależy jednak, czy wektor pochodzi z wiersza lub kolumny.

+0

Dla "o jedynej rzeczy, którą możesz zrobić", przeczytaj "tylko ja wiedziałem, jak to zrobić". Dzięki za informację o 'TableDirections', Heike. Prawdopodobnie nadal będę używał funkcji pomocnika, ale to oszczędza przepisanie wiersza. –

+0

+1, podoba mi się twoje rozwiązanie, łatwo po prostu dodać dodatkowe '{}' w razie potrzeby. Próbowałem też drukować matrycę 3D i drukować matrycę 3D tak, jak lubię teraz, gdzie wcześniej było to mylące. Zobacz edycję (2). – Nasser

5

Albo może po prostu gotować własną funkcję RowForm, np .:

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

Następnie

RowForm[twoRowsMatrix[[All,1]]] 

wygląda rodzaju O.K.

Ewentualnie, jeśli naprawdę zależy na wyświetlanie wektorów, można zrobić:

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, dobre rozwiązanie, ale naprawdę nie powinno się wpadać w nawyk używania pierwszej litery dla funkcji zdefiniowanych przez użytkownika. ktoś patrząc na funkcję RowForm w kodzie może myśleć, że jest to funkcja wbudowana. – Nasser

0

Jeśli nie dbają o () części, a następnie można dodać z ,{}, zawinąć w nawiasach klamrowych, a używać TableForm lub Grid zamiast:

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

Kiedy się martwić o to, używam {{a, b, c}}, aby określić wiersz a, b, c (mogą być wszelkiego rodzaju listy) i Transponuj [{{a, b, c}}], aby określić kolumnę 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] 
Powiązane problemy