根据向量的圆形移位创建对称矩阵

诺列加

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

假设一个向量 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)(不同于vector v),创建矩阵的手动过程如下所示:

![![在此处输入图片描述

使用第一行作为基数(向量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"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R /根据下三角元素的向量创建对称矩阵

来自分类Dev

根据向量在R中创建矩阵

来自分类Dev

根据数字创建多个矩阵/向量

来自分类Dev

根据矩阵和向量创建数组

来自分类Dev

根据阈值过滤对称矩阵

来自分类Dev

R根据“行”向量和“列”向量的运算创建矩阵

来自分类Dev

在R中创建对称矩阵

来自分类Dev

向量-向量乘法以创建矩阵

来自分类Dev

从矩阵创建向量

来自分类Dev

从R中的长表创建对称矩阵

来自分类Dev

如何创建对称的零和一矩阵

来自分类Dev

创建循环移位矩阵的for循环的替代方法

来自分类Dev

根据向量获取矩阵的子集

来自分类Dev

根据向量获取矩阵的子集

来自分类Dev

将非对称向量列表转换为矩阵

来自分类Dev

将非对称向量列表转换为矩阵

来自分类Dev

使矩阵对称

来自分类Dev

根据条件创建向量

来自分类Dev

根据功能创建矩阵

来自分类Dev

根据名称创建矩阵

来自分类Dev

如何交换根据右对角线对称的矩阵元素

来自分类Dev

从多个列向量创建矩阵

来自分类Dev

从R中的向量创建矩阵

来自分类Dev

从向量创建列数矩阵

来自分类Dev

如何创建矩阵的向量(数组)?

来自分类Dev

Matlab-从矩阵创建向量

来自分类Dev

使用for循环从向量创建矩阵?

来自分类Dev

我可以根据旋转/平移向量创建转换矩阵吗?

来自分类Dev

根据向量的最小值和最大值创建重复列的矩阵