web-dev-qa-db-ja.com

ベクトルの循環シフトから対称行列を作成する

対称行列の作成に苦労しています。

ベクトルとしましょうv <- c(1,2,3)

次のようなマトリックスを作成したいと思います。

_matrix(ncol = 3, nrow = 3, c(1,2,3,2,3,1,3,1,2), byrow = FALSE)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    2    3    1
[3,]    3    1    2
_

(これは単なる序文です。長さの異なるベクトルがたくさんあります。)

これは、対角線c(1,3,2)(ベクトルvとは異なる)の対称行列であり、行列を作成する手動プロセスは次のようになります。

![![enter image description here

最初の行をベース(ベクトルv)として使用して、左側の残りの値で空のスペースを埋めます。

どんな助けでもありがたいです。ありがとう!

4
noriega

もう1つのオプションは、Reduceを使用してc(v[-1], v[1])を累積的にすることです。

do.call(rbind, Reduce(function(x, y) c(x[-1], x[1]), v[-1], v, accumulate = TRUE))
#     [,1] [,2] [,3]
#[1,]    1    2    3
#[2,]    2    3    1
#[3,]    3    1    2
0
GKi