Wolfram mathematica 三个矩阵的乘积是奇数块矩阵吗?

Wolfram mathematica 三个矩阵的乘积是奇数块矩阵吗?,wolfram-mathematica,matrix-multiplication,Wolfram Mathematica,Matrix Multiplication,在下面的mathematica代码位中 a1 = {{0, -I}, {I, 0}} a2 = {{0, 1}, {1, 0}} a3 = {{1, 0}, {0, -1}} c = I*a1*a2 // MatrixForm d = c*a3 // MatrixForm d的显示显示为一个二乘二矩阵,其中1,1和2,2元素本身就是2x2矩阵,而我希望它是一个普通的2x2标量矩阵 use () to protect expression from MatrixFrom which is a w

在下面的mathematica代码位中

a1 = {{0, -I}, {I, 0}}
a2 = {{0, 1}, {1, 0}}
a3 = {{1, 0}, {0, -1}}
c = I*a1*a2 // MatrixForm
d = c*a3 // MatrixForm
d的显示显示为一个二乘二矩阵,其中1,1和2,2元素本身就是2x2矩阵,而我希望它是一个普通的2x2标量矩阵

use () to protect expression from MatrixFrom which is a wrapper.
use '.' for matrix multiplication. Not '*'

a1 = {{0, -I}, {I, 0}}
a2 = {{0, 1}, {1, 0}}
a3 = {{1, 0}, {0, -1}}
(c = I a1.a2) // MatrixForm
(d = c.a3) // MatrixForm
这是我得到的d的输出:

(1  0
 0  1)

这是Mathematica中的经典问题之一

MatrixForm
显示包装的优先级高于
Set
运算符(
=

假设(基于您的标记选择)您打算使用矩阵乘法
点(
)而不是时间(
*
),我会这样写

a1 = {{0, -I}, {I, 0}}
a2 = {{0, 1}, {1, 0}}
a3 = {{1, 0}, {0, -1}}
(c = I a1.a2) // MatrixForm
(d = c.a3) // MatrixForm
分别返回
c
d

(1  0
 0  -1)

(1  0
 0  1)

编辑:
我忘了说你是否进去了

c = I a1.a2 // MatrixForm
然后快速查看
c
FullForm
,就会发现问题所在:

In[6]:= FullForm[c]
Out[6]//FullForm= MatrixForm[List[List[1,0],List[0,-1]]]

你可以看到它有
头[c]==MatrixForm
,因此它不能很好地处理其他矩阵。

你以“--”击败了我!(还有,我已经删除了你的签名。)@Peeter
FullForm
的重要性怎么强调都不够。当你需要了解任何意外情况时,你会发现自己在使用它result@belisarius:版本8
图形中的对象除外。当
FullForm
的行为更像python的
\uuuu repr\uuuu(self)
方法时,它会为您提供一个输出,让您可以重新创建对象:(@Simon Yeah.如果WRI这样做,许多任务将变得困难:)“输出将让你重新创建对象”--我似乎记得花环(我认为)写的东西,即使那不是真的,因为它可以/确实给出无效输入的输出。@Mr.Wizard:你的意思是?不管怎么说,这可能不是举行婚礼的好地方!