gpt4 book ai didi

r - 对角线矩阵为1的矩阵

转载 作者:行者123 更新时间:2023-12-04 18:13:03 24 4
gpt4 key购买 nike

说我有以下矩阵矩阵,它是一个二进制指标矩阵:

mat<-matrix(c(1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1), byrow=T, nrow=3)


> mat
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 1 0 0 0 0
[2,] 0 0 1 1 0 0
[3,] 0 0 0 0 1 1

该矩阵只有3行。我需要创建一个具有10000行的行,并且在对角线上使用相同的成对模式1。
例如。对于5行,我希望使用5 x 10的矩阵:
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 1 0 0 0 0 0 0 0 0
[2,] 0 0 1 1 0 0 0 0 0 0
[3,] 0 0 0 0 1 1 0 0 0 0
[4,] 0 0 0 0 0 0 1 1 0 0
[5,] 0 0 0 0 0 0 0 0 1 1

有人知道这样做的简单方法吗?
非常感谢

最佳答案

这是一个稀疏的矩阵,因此,您将更好地引用非零条目:这将节省您的RAM,并使自动生成矩阵更加容易。

每个条目的索引是(i,j,x),分别引用行,列和值。假设您要填充N(例如N = 10)行,那么每行将产生2个条目(在下面的代码中由i索引);每个列仅使用一次,因此有2 * N个唯一列值。每个非零条目均为1。

产生该代码的代码是:

N = 10
i = rep(1:N, each = 2)
j = 1:(2*N)
v = 1

library(Matrix)
mat = sparseMatrix(i = i, j = j, x = v)

结果矩阵为:
> mat
10 x 20 sparse Matrix of class "dgCMatrix"

[1,] 1 1 . . . . . . . . . . . . . . . . . .
[2,] . . 1 1 . . . . . . . . . . . . . . . .
[3,] . . . . 1 1 . . . . . . . . . . . . . .
[4,] . . . . . . 1 1 . . . . . . . . . . . .
[5,] . . . . . . . . 1 1 . . . . . . . . . .
[6,] . . . . . . . . . . 1 1 . . . . . . . .
[7,] . . . . . . . . . . . . 1 1 . . . . . .
[8,] . . . . . . . . . . . . . . 1 1 . . . .
[9,] . . . . . . . . . . . . . . . . 1 1 . .
[10,] . . . . . . . . . . . . . . . . . . 1 1

只需使用上面的代码并设置N = 10000,就可以得到矩阵。

此外,您所需的矩阵(N = 1E5)仅消耗321424字节。相反,大小为10K x 20K的标准密集矩阵将使用数字(即8字节)条目占用1.6GB。正如他们在“联系方式”中所说的那样:这似乎是在浪费大量的空间,对吗?

关于r - 对角线矩阵为1的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9096508/

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