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 矩阵,而最后一个只是一个数字?

4

1 回答 1

1

问题的出现是因为从 eye(3) 创建 t(1,:) 的方式。

如果您单独输出 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
于 2013-02-05T17:11:12.647 回答