gpt4 book ai didi

r - 从向量的循环移位创建对称矩阵

转载 作者:行者123 更新时间:2023-12-03 23:47:07 25 4
gpt4 key购买 nike

我正在努力创建对称矩阵。

假设一个向量 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

(这只是一个 reprex,我有许多不同长度的向量。)

注意这是一个对角线对称的矩阵 c(1,3,2) (与向量 v 不同)并且创建矩阵的手动过程如下所示:

![![enter image description here

使用第一行作为基数(向量 v),该过程是用左侧的剩余值填充空白空间。

任何帮助表示赞赏。谢谢!

最佳答案

让我回答我自己的问题以便正确关闭它,使用来自 的令人难以置信的简单易用的解决方案Henrik 的评论 :

matrix(v, nrow = 3, ncol = 4, byrow = TRUE)[ , 1:3]

也许是 byrow = TRUE在概念上最匹配插图的三个步骤,但输出与以下内容相同:
matrix(v, nrow = 4, ncol = 3)[1:3, ]
# [,1] [,2] [,3]
# [1,] 1 2 3
# [2,] 2 3 1
# [3,] 3 1 2

因为可能有“许多不同长度的向量”,所以可以方便地制作一个简单的函数并将其应用于存储在 list 中的向量。 :
cycle = function(x){
len = length(x)
matrix(x, nrow = len + 1, ncol = len)[1:len , ]
}

l = list(v1 = 1:3, v2 = letters[1:4])

lapply(l, cycle)
# $v1
# [,1] [,2] [,3]
# [1,] 1 2 3
# [2,] 2 3 1
# [3,] 3 1 2
#
# $v2
# [,1] [,2] [,3] [,4]
# [1,] "a" "b" "c" "d"
# [2,] "b" "c" "d" "a"
# [3,] "c" "d" "a" "b"
# [4,] "d" "a" "b" "c"

关于r - 从向量的循环移位创建对称矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62032875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com