2012-01-02 36 views
5

Có cách nào để làm cho MatrixForm hiển thị vectơ hàng theo chiều ngang trên đường thẳng và không theo chiều dọc như đối với vectơ cột? Đôi khi điều này làm tôi bối rối. Bạn có nghĩ rằng nó sẽ khó để viết wrapper quanh ma trận hình thức để điều chỉnh hành vi này? Ví dụ, đây là ma trận 2 x2. Các hàng hiển thị giống như các cột. Cả hai đều được hiển thị theo chiều dọc.Làm thế nào để làm cho hàng hiển thị MatrixForm theo chiều ngang dưới dạng vectơ hàng thực và không theo chiều dọc dưới dạng vectơ cột?

enter image description here

Câu hỏi: Có thể làm vectơ hàng MatrixForm hiển thị đặt ra theo chiều ngang và theo chiều dọc không?

Xin lỗi nếu điều này được hỏi trước, tìm kiếm nhanh sẽ không hiển thị gì.

nhờ

cập nhật (1)

FYI, đây là trong Matlab, nó in hàng ngang và cột dọc tự động, tôi đã hy vọng cho một cái gì đó như thế này. Nhưng tôi sẽ sử dụng gợi ý của Heike bên dưới cho đến bây giờ vì nó giải quyết vấn đề này với chi phí nhập ít hơn.

enter image description here

cập nhật (2) Sử dụng giải pháp Hilderic là đẹp cũng có, tôi luôn dành thời gian chăm chỉ in ma trận 3D một cách tôi có thể đọc nó. Ở đây nó hiện đang sử dụng {} lừa

enter image description here

+4

'MatrixForm [twoRowsMatrix [[1, All]], TableDirections -> Row]' sẽ hoạt động. – Heike

+0

@Heike, cảm ơn! những sự giúp đỡ đó. Tôi ước rằng MatrixForm sẽ tự mình hình dung ra điều này, nhưng tôi đoán nó sẽ rất khó. Kể từ khi vượt qua nó một danh sách, nó không biết nếu nó một vector hàng hoặc một vector cột! Tôi đoán tôi chỉ cần thêm tùy chọn này bây giờ bất cứ khi nào tôi biết những gì tôi in là một hàng. Sự giúp đỡ này. – Nasser

Trả lời

6

Đối với cả hai arrayname[[All,1]]arrayname[[1,All]], Part cung cấp một vector, và MatrixForm không có cách nào xác định những "định hướng" nó có. Theo đó, nó luôn luôn in vectơ dưới dạng cột.

Về điều duy nhất bạn có thể làm là cung cấp thường xuyên đầu ra của riêng bạn cho vectơ hàng, ví dụ, bằng cách gói nó trong một danh sách kèm theo, chuyển đổi nó trở lại một (đơn hàng) ma trận:

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

Nó vẫn còn tùy thuộc vào bạn để nhớ liệu một vector đến từ một hàng hay một cột, mặc dù.

+0

Đối với "về điều duy nhất bạn có thể làm", đọc "chỉ là tôi biết làm thế nào để làm điều đó". Cảm ơn thông tin về 'TableDirections', Heike. Tôi có lẽ vẫn còn sử dụng chức năng trợ giúp, nhưng điều này tiết kiệm rewrapping hàng. –

+0

+1, tôi thích giải pháp của bạn, dễ dàng thêm một '{}' khi cần thiết. Tôi cũng đã thử in ma trận 3D, và in ma trận 3D theo cách tôi thích bây giờ, nơi mà trước đó nó đã gây nhầm lẫn. Vui lòng xem chỉnh sửa (2). – Nasser

5

Hoặc bạn chỉ có thể nấu lên chức năng RowForm riêng của bạn, ví dụ .:

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

Sau đó

RowForm[twoRowsMatrix[[All,1]]] 

trông loại o.k.

Ngoài ra, nếu bạn thực sự chỉ quan tâm đến vectơ hiển thị, bạn có thể làm:

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, giải pháp tốt, nhưng bạn thực sự không nên có thói quen sử dụng chữ cái đầu tiên của UpperCase cho các hàm do người dùng định nghĩa. ai đó nhìn vào hàm RowForm trong mã có thể nghĩ rằng nó là một hàm dựng sẵn. – Nasser

0

Nếu bạn không quan tâm đến phần (), sau đó bạn có thể thêm với ,{}, quấn trong dấu ngoặc móc, và sử dụng TableForm hoặc Grid thay vì:

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

Khi tôi nhận được lo lắng về điều này, tôi sử dụng {{a, b, c}} để chỉ định một dãy a, b, c (họ có thể được bất kỳ loại danh sách) và Transpose [{{a, b, c}}] để chỉ định một cột 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] 
Các vấn đề liên quan