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

最初の 2 つは 3x3 行列を返すのに、最後の 1 つは単なる数値であるのはなぜですか?

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) を vector に変換すると、期待される結果が得られます。

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

**Diagonal Matrix**

   1   0   0
   0   0   0
   0   0   0
于 2013-02-05T17:11:12.647 に答える