如何从计数矩阵获得邻接矩阵

马尔科夫扬

我有一个 nxp 非常稀疏的计数矩阵,只有非负值和名为 y_1, ... , y_p 的列。(n=200 万,p=70)

我想使用 R 将它转换为一个矩阵,该矩阵计算 y_i 和 y_j 在同一行上具有非零值的次数。

例子:

ID a b c d e 
1  1 0 1 0 0
2  0 1 1 0 0
3  0 0 1 1 0
4  1 1 0 0 0

我想获得:

- a b c d e
a 2 1 1 0 0
b 1 2 1 0 0 
c 1 1 3 1 0
d 0 0 1 1 0
e 0 0 0 0 0
格雷戈尔·托马斯

这是一个简单的矩阵乘法。

t(m) %*% m
  a b c d e
a 2 1 1 0 0
b 1 2 1 0 0
c 1 1 3 1 0
d 0 0 1 1 0
e 0 0 0 0 0

使用这些数据:

m = read.table(text = "ID a b c d e 
1  1 0 1 0 0
2  0 1 1 0 0
3  0 0 1 1 0
4  1 1 0 0 0", header = T)
m = as.matrix(m[, -1])

这依赖于原始矩阵只有 1 和 0。如果不是,您可以创建它m = original_matrix > 0


这是它在您描述的矩阵上工作:

library(Matrix)
nr = 2e6
nc = 70
mm = Matrix(0, nrow = nr, ncol = nc, sparse = T)

# make, on average, three 1s per row
set.seed(47)
mm[cbind(sample(nr, size = 3 * nr, replace = T), sample(nc, size = 3 * nr, replace = T))] = 1 

system.time({res = t(mm) %*% mm})
  #  user  system elapsed 
  # 0.836   0.057   0.895 
format(object.size(res), units = "Mb")
[1] "0.1 Mb

在我的笔记本电脑上,计算时间不到一秒钟,结果约为 0.1 Mb。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

邻接矩阵Java

来自分类Dev

邻接矩阵实现

来自分类Dev

如何使用MATLAB绘制邻接矩阵

来自分类Dev

如何从输入创建邻接矩阵?

来自分类Dev

如何从C#中的矩阵获取邻接矩阵

来自分类Dev

Python中的邻接矩阵

来自分类Dev

Java中的邻接矩阵

来自分类Dev

邻接矩阵必须对称

来自分类Dev

创建邻接矩阵Matlab

来自分类Dev

图形:用于邻接矩阵

来自分类Dev

Java中的邻接矩阵

来自分类Dev

scala:邻接矩阵图

来自分类Dev

创建权重邻接矩阵

来自分类Dev

邻接矩阵必须对称

来自分类Dev

邻接矩阵图实现

来自分类Dev

邻接矩阵删除顶点

来自分类常见问题

从表示关系的矩阵制作邻接矩阵

来自分类Dev

熊猫交易矩阵中的邻接矩阵

来自分类Dev

从表示关系的矩阵制作邻接矩阵

来自分类Dev

igraph从邻接表生成邻接矩阵

来自分类Dev

如何从python中的字典生成图的邻接矩阵?

来自分类Dev

如何使用加权邻接矩阵绘制边缘权重?

来自分类Dev

如何获取JanusGraph Gremlin返回的子图的邻接矩阵?

来自分类Dev

如何将该邻接矩阵转换为图形对象?

来自分类Dev

如何将该邻接矩阵转换为图形对象?

来自分类Dev

如何将该邻接矩阵转换为图形对象?

来自分类Dev

如何在Matlab中形成邻接矩阵

来自分类Dev

如何从python中的字典生成图的邻接矩阵?

来自分类Dev

在R中找到完整的邻接矩阵