如何使MatrixForm水平显示为实际行向量而不是垂直显示为列向量?

时间:2012-01-02 21:53:49

标签: wolfram-mathematica

有没有办法让MatrixForm在行上水平显示行向量,而不是像列向量一样垂直显示行向量?因为这有时让我困惑。您是否认为在矩阵形式周围编写包装以调整此行为会很困难?

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

enter image description here

问题:是否可以使MatrixForm显示水平而非垂直排列的行向量?

很抱歉,如果之前有人问这个问题,快速搜索就不会显示任何内容。

感谢

更新(1)

fyi,这是在Matlab中,它水平打印行和垂直列自动,我希望有这样的东西。但我现在使用Heike的建议,因为它解决了这个问题,只需要额外打字。

enter image description here

更新(2) 使用Hilderic解决方案也很好,我总是很难以一种我可以阅读它的方式打印3D矩阵。现在使用{}技巧

enter image description here

4 个答案:

答案 0 :(得分:6)

对于arrayname[[All,1]]arrayname[[1,All]]Part都会传递一个向量,而MatrixForm无法确定它具有哪个“方向”。因此,它总是将矢量打印为列。

关于你唯一能做的就是为行向量提供自己的输出例程,例如,将它包装在一个封闭列表中,然后将其转换回(单行)矩阵:

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

尽管如此,仍然需要记住矢量是来自行还是列。

答案 1 :(得分: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]

答案 2 :(得分:0)

如果您不关心()部分,则可以附加,{},用大括号括起来,然后使用TableFormGrid代替:< / p>

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

答案 3 :(得分:0)

当我对此感到担心时,我使用{{a,b,c}}来指定a,b,c的行(它们可以是任何类型的列表)和Transpose [{{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]