R:维名称列表中的稀疏矩阵

Hyco

如何从维度名称列表中创建稀疏矩阵?

假设您在数据帧中有此矩阵边列表:

  from to weight
1    4  a      1
2    5  b      2
3    6  c      3

可以这样创建:

from <- factor(c(4:6))
to <- c("a", "b", "c")
weight <- c(1:3)
foo <- data.frame(from, to, weight)

可以通过首先创建一个填充0的空矩阵,命名行和列,然后将值填充到以下方式来创建矩阵:

bar <- matrix(
  0,
  nrow = length(unique(foo$from)),
  ncol = length(unique(foo$to)),
  dimnames = list(levels(foo$from), levels(foo$to))
)
bar[as.matrix(foo[,1:2])] <- foo[,3]

结果看起来像这样:

  a b c
4 1 0 0
5 0 2 0
6 0 0 3

如何创建稀疏矩阵?

解决方案

一种优雅的方法是使用Matrix程序包,程序包需要使用factor的整数值

bar_sparse <- sparseMatrix(
  i = as.numeric(foo$from),
  j = as.numeric(foo$to),
  x = foo$weight,
  dimnames = list(levels(foo$from), levels(foo$to))
)

开始了:

  a b c
4 1 . .
5 . 2 .
6 . . 3

谢谢马丁,向我指出了这个方向。

马丁·梅克勒(MartinMächler)

作为Matrix软件包的维护者:允许在构造中为sparseMatrix对象使用甚至在名称时都使用暗名,甚至对于重要的列名称也可以使用暗名,例如,对于稀疏模型矩阵(例如,glmnet等等)。但是出于效率的原因(部分缺乏用例,因此“尚未实现”)它们并不总是在矩阵乘法中传播,例如IIRC。

这种“半劝阻”支持的主要原因是这样的事实:当从大的意义上讲非常大时,稀疏矩阵特别重要nrow(.) * ncol(.)在这种情况下,携带(和复制!!)成千上万的行(和列)名称会非常昂贵。

经过所有这些警告之后,我当然承认您已经提出了一个非常有效的问题,并且您可能暂时没有选择,并且确实需要使用行和列名称而不是整数索引。

是的,您(几乎)是正确的:使用

M <- Matrix(0, n,m, dimnames=....)
for(i in ...)
  for(j in ...)
        M[i,j] <- ...

从来没有一个很好的点子sparseMatrix对象(即所有Matrix对象继承sparseMatrix)。相反,使用sparseMatrix(...., dimnames = ..)..顺便指出使用dimnames参数比设置colnamesrownames之后分别更有效

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R列表稀疏矩阵

来自分类Dev

将稀疏矩阵索引列表转换为R中的矩阵

来自分类Dev

列表列表中的Scipy稀疏矩阵

来自分类Dev

R要稀疏矩阵的向量列表

来自分类Dev

边缘列表中的Scipy稀疏矩阵

来自分类Dev

R中的二维数组列表上的矩阵乘法

来自分类Dev

在R中创建多个相同(维数)矩阵的列表

来自分类Dev

从列表创建稀疏矩阵

来自分类Dev

用R中的sapply填充稀疏矩阵

来自分类Dev

如何在列表中没有维名称的情况下制作矩阵

来自分类Dev

如何在列表中没有维名称的情况下制作矩阵

来自分类Dev

通过匹配R中的名称在矩阵中插入向量列表

来自分类Dev

R构造稀疏矩阵

来自分类Dev

Scipy从坐标列表中快速初始化稀疏矩阵

来自分类Dev

使用C中的链接列表创建稀疏矩阵

来自分类Dev

初始化高维稀疏矩阵

来自分类Dev

稀疏矩阵的降维(TSNE / PCA)

来自分类Dev

用R中列表中的行有效地填充二维矩阵

来自分类Dev

如何在R中并行化包含稀疏矩阵的算法

来自分类Dev

R:稀疏矩阵中的有效列减法

来自分类Dev

R Matrix包:稀疏矩阵在dgCMatrix类中的属性的含义

来自分类Dev

在R中构造此稀疏矩阵的最快方法是什么

来自分类Dev

R中的稀疏连通图的邻接矩阵

来自分类Dev

使用稀疏矩阵作为R中Ranger包的输入

来自分类Dev

创建稀疏矩阵时 R 中的内存分配问题

来自分类Dev

如何从python中的列表创建矩阵或二维列表?

来自分类Dev

如何从R中的高维数组创建低维矩阵?

来自分类Dev

使用R创建稀疏矩阵

来自分类Dev

本征中的稀疏矩阵