2012-01-02 41 views
5

有没有一种方法可以使MatrixForm在行上水平显示行矢量,而不是像列矢量那样垂直显示行矢量?这有时让我感到困惑。你认为围绕矩阵形式编写包装会很难调整这种行为吗?如何将MatrixForm显示行作为实际行向量水平显示,而不是垂直显示为列向量?

例如,这里是一个2乘2的矩阵。行显示与列相同。两者都显示为垂直。

enter image description here

问题:是否有可能使水平和垂直不奠定了MatrixForm显示行向量?

对不起,如果这是之前问,快速搜索什么也没有显示。

感谢

更新(1)

仅供参考,这是在Matlab,它打印水平的行和列垂直自动,我希望这样的事情。但是现在我会使用Heike的建议,因为它解决了这个问题,只需要额外打字。

enter image description here

更新(2) 使用希尔德里克解决方案也不错,我一直很难在某种程度上我可以读取它打印的3D矩阵。这是现在使用的{}

enter image description here

+4

'MatrixForm [twoRowsMatrix [[1,All]],TableDirections - > Row]'应该可以工作。 – Heike 2012-01-02 21:59:22

+0

@喜欢,谢谢!这有助于。我希望MatrixForm能够自行解决这个问题,但我想这很难。由于传递给它一个列表,它不知道它是一个行向量还是一个列向量!我想我只需要现在就添加这个选项,只要我知道我打印的内容是连续的。这个帮助。 – Nasser 2012-01-02 22:07:46

回答

6

对于这两种arrayname[[All,1]]arrayname[[1,All]]Part提供了一个载体,和阵列式无法确定它具有“方向”的方式。因此,它总是将矢量打印为列。

关于你能做的就是为行向量,如自己的输出程序,通过包装它在一个封闭列表,将其转换回一个(单行)矩阵的唯一的事情:

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

尽管如此,还是要记住一个矢量是来自一行还是一列。

+0

对于“你可以做的唯一事情”,阅读“唯一的我知道该怎么做”。感谢关于'TableDirections'的信息,Heike。我可能仍然会使用帮助函数,但这样可以节省重新包装行。 – 2012-01-02 22:15:12

+0

+1,我喜欢你的解决方案,只需在需要时添加一个额外的'{}'。我也尝试过打印3D矩阵,并且按照我现在喜欢的方式打印3D矩阵,在这之前它很混乱。请参阅编辑(2)。 – Nasser 2012-01-03 00:41:24

5

或者你可以只煮了自己RowForm功能,例如:

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

然后

RowForm[twoRowsMatrix[[All,1]]] 

看起来种O.K.的

或者,如果你真的只关心显示向量,你可以这样做:

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,很好的解决方案,但是你真的不应该养成为用户定义函数使用UpperCase首字母的习惯。有人在代码中查看RowForm函数可能认为它是内置函数。 – Nasser 2012-01-03 00:04:48

0

如果你不关心()一部分,那么你就可以,{}追加,包裹在大括号和使用TableFormGrid代替:

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

当我担心这个,我使用{{A,b,C}}指定的一排,b,C(它们可以是任何类型的列表)和移调[{{a,b,c}}]来指定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]