有没有办法让MatrixForm
在行上水平显示行向量,而不是像列向量一样垂直显示行向量?因为这有时让我困惑。您是否认为在矩阵形式周围编写包装以调整此行为会很困难?
例如,这是一个2乘2的矩阵。行显示与列相同。两者都是垂直的。
问题:是否可以使MatrixForm
显示水平而非垂直排列的行向量?
很抱歉,如果之前有人问这个问题,快速搜索就不会显示任何内容。
感谢
更新(1)
fyi,这是在Matlab中,它水平打印行和垂直列自动,我希望有这样的东西。但我现在使用Heike的建议,因为它解决了这个问题,只需要额外打字。
更新(2)
使用Hilderic解决方案也很好,我总是很难以一种我可以阅读它的方式打印3D矩阵。现在使用{}
技巧
答案 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)
如果您不关心()
部分,则可以附加,{}
,用大括号括起来,然后使用TableForm
或Grid
代替:< / 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]