加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用R创建整数的相似性矩阵

发布时间:2020-12-14 04:34:35 所属栏目:大数据 来源:网络整理
导读:我有一个对角线等于零的矩阵和非对角线都等于1(单位矩阵的倒数): mat1 - matrix(c(0,1,0),5,5) 我还有一个向量,它始终与矩阵的dims长度相同,并始终从零开始: vec1 - c(0,2,3,4) 使用这两个对象我想创建一个如下所示的矩阵: mat2 - matrix(c(0,4,5) [,1] [
我有一个对角线等于零的矩阵和非对角线都等于1(单位矩阵的倒数):

mat1 <- matrix(c(0,1,0),5,5)

我还有一个向量,它始终与矩阵的dims长度相同,并始终从零开始:

vec1 <- c(0,2,3,4)

使用这两个对象我想创建一个如下所示的矩阵:

mat2 <- matrix(c(0,4,5)

     [,1] [,2] [,3] [,4] [,5]
[1,]    0    1    2    3    4
[2,]    1    0    1    2    3
[3,]    2    1    0    1    2
[4,]    3    2    1    0    1
[5,]    4    3    2    1    0

我想要一个可以推广的操作,这样如果我有一个9到9的dims矩阵,和0:8的向量,我可以得到相同的结果.有关如何处理此问题的任何想法?

解决方法

当vec1以零开头时,你可以这样做:

MakeMatrix <- function(x){
  n <- length(x)
  id <- abs(rep(1:n,n)-rep(1:n,each=n)) + 1
  matrix(x[id],ncol=n)
}

MakeMatrix(vec1)

所以没有必要在输入中使用mat1,因为那个实际上是多余的.你可以在函数中构造矩阵.

诀窍在于提供一系列id值以从向量中进行选择,然后将所有内容转换为矩阵.

编辑:如果你只是要使用序列,你也可以这样做:

MakeMatrix <- function(n){
  id <- abs(rep(1:n,each=n))
  matrix(id,ncol=n)
}

MakeMatrix(7)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读