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

标签 r matrix sparse-matrix indicator

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

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/

相关文章:

r - 如何使用 ggplot2 在世界地图上绘制一个点?

java - 如何使用arraylist JAVA从矩阵中获取值

c++ - 使用 eigen/Intel MKL 求解稀疏线性系统

r - 如何将 DocumentTermMatrix(tm 包)转换为 R 中的稀疏矩阵?

r - 从 GGMAP 获得更高的精度

r - 如何在 ggplot2 中为图例键混合不同的符号?

r - 使用匹配行上的另一个数据帧更新数据帧,例如使用 join 语句进行 SQL 更新

c++ - 将矩阵调整为 double 组

c++ - C++ 中的图像模糊。矩阵拷贝的问题

python - 使用 Pandas 对数据进行非规范化