0

私はMatlabに翻訳しているこのコードを見ています.Rで実行中のバージョンではなく、ソースコードしかありません.

Result[,1:2]<-diag(max)

max は [2*1] 配列です。

これは、結果の最初の 4 つの要素に割り当てられた rhs に対角行列を作成していると想定していました。

ただし、左辺の対角要素のみを変更する必要があると思います(右辺の最大値に)。これはコードの正しい読み取りですか?

4

1 に答える 1

1

このコードは割り当てられません。要素ごとに matrix を比較するだけです。寸法が正しい場合にのみ機能します。ここに例があります:

set.seed(1234)

Result <- matrix(rnorm(20),nrow=2)
Result[,1:2] <= diag(max(c(2,2)))

     [,1]  [,2]
[1,]  TRUE FALSE
[2,] FALSE  TRUE

エラーが発生する例(最も可能性の高いケース)

Result[,1:2] <= diag(max(c(2,4)))
Error in Result[, 1:2] <= diag(max(c(2, 4))) : non-conformable arrays

OP編集後の編集

元のコードが

Result[,1:2] <- diag(max(c(2,2)))

   [,1] [,2]      [,3]       [,4]       [,5]
[1,]    1    0 0.4291247 -0.5747400 -0.5644520
[2,]    0    1 0.5060559 -0.5466319 -0.8900378

上記のように、コードは対角行列 (4 番目の要素) を割り当てますが、正しい次元がない場合、これは機能しません。例:

  Result <- matrix(rnorm(6),nrow=3)
  Result[,1:2] <- diag(max(c(2,2)))

 Error in Result[, 1:2] <- diag(max(c(2, 2))) : 
 number of items to replace is not a multiple of replacement length

結果には RHS よりも多くの行があるため、エラーが発生しました。

Result
           [,1]       [,2]
[1,] -1.2070657 -2.3456977
[2,]  0.2774292  0.4291247
[3,]  1.0844412  0.5060559

RHSは

diag(max(c(2,2)))
     [,1] [,2]
[1,]    1    0
[2,]    0    1
于 2013-02-13T20:04:51.077 に答える