Matrix 为什么diag在倍频程中表现出不一致的行为

Matrix 为什么diag在倍频程中表现出不一致的行为,matrix,octave,diagonal,Matrix,Octave,Diagonal,有人能解释一下这是怎么回事吗 octave:1> t = eye(3) t = Diagonal Matrix 1 0 0 0 1 0 0 0 1 octave:2> diag(t(3,:)) ans = Diagonal Matrix 0 0 0 0 0 0 0 0 1 octave:3> diag(t(2,:)) ans = Diagonal Matrix 0 0

有人能解释一下这是怎么回事吗

octave:1> t = eye(3)
t =

Diagonal Matrix

   1   0   0
   0   1   0
   0   0   1

octave:2> diag(t(3,:))
ans =

Diagonal Matrix

   0   0   0
   0   0   0
   0   0   1

octave:3> diag(t(2,:))
ans =

Diagonal Matrix

   0   0   0
   0   1   0
   0   0   0

octave:4> diag(t(1,:))
ans =  1

为什么前两个返回3x3矩阵,而最后一个只是一个数字?

问题的产生是因为t(1,:)是从eye(3)创建的

如果单独输出t的行,则结果为:

octave.28> t(1,:)
ans = 

**Diagonal Matrix**

   1   0   0

octave.29> t(2,:)

ans = 

   0   1   0

octave.30> t(3,:)

ans = 

   0   0   1
由于某种原因(我无法解释),t(1,:)仍然被认为是对角矩阵,而t(2,:)和t(3,:)是向量。调用diag(t(:,1))时,它接收的不是向量参数,而是矩阵。如果在求值之前将t(:,1)转换为向量,则会得到预期的结果

octave.31> diag(vec(t(1,:)))
ans = 

**Diagonal Matrix**

   1   0   0
   0   0   0
   0   0   0