1

さて、私は以前にこの質問をしましたが、何も指定せず、以前の試みの兆候を示さなかったことで(当然のことながら)打ちのめされました。それでは、もう一度試してみましょう..

私は R を使用しており、463✕463 行列を持っています。私がやりたいことは、対角要素 (X 11、X 22、X 33、...、X jj )以外のすべての要素をゼロに置き換えることです。

例えば、私が欲しい:

[1 4 5
 2 3 5
 3 9 8]

することが:

[1 0 0
 0 3 0
 0 0 8]

この関数を使用するdiag()と、単純に対角値の列ベクトルが得られます。「対角線ではない場合」のロジックと何らかの形で組み合わせて関数を使用できると思いreplace()ます...しかし、私は迷っています。

はい、ここにいる何人かが推測しているように、私はおそらくここにいる多くの人よりもずっと若く、これについてはまったくの初心者です...だから、私を正しい方向に導いてください. 本当にありがとうございました!

4

3 に答える 3

3

R では、diagメソッドには 2 つの機能があります。

  1. 行列の対角を返します。いえ

    m <- matrix(1:9, ncol=3)
    m
    #      [,1] [,2] [,3]
    # [1,]    1    4    7
    # [2,]    2    5    8
    # [3,]    3    6    9
    diag(m)
    # [1] 1 5 9
    
  2. 対角行列を構築できます。

    diag(1:3)
    #      [,1] [,2] [,3]
    # [1,]    1    0    0
    # [2,]    0    2    0
    # [3,]    0    0    3
    

したがって、あなたの場合、既存の行列から対角線を抽出し、次のように指定しますdiag

diag(diag(m))
#      [,1] [,2] [,3]
# [1,]    1    0    0
# [2,]    0    5    0
# [3,]    0    0    9
于 2013-05-23T06:26:30.287 に答える