gpt4 book ai didi

r - 如何在 R 中得到一个大的稀疏矩阵? (> 2^31-1)

转载 作者:行者123 更新时间:2023-12-04 11:43:22 26 4
gpt4 key购买 nike

我使用一些 C++ 代码从数据库中获取一个文本文件,并从 Matrix 创建一个 dgcMatrix 类型的稀疏矩阵。包裹。我第一次尝试构建一个具有超过 2^31-1 个非稀疏成员的矩阵,这意味着稀疏矩阵对象中的索引向量也必须长于该限制。不幸的是,向量似乎使用 32 位整数索引,就像 Rcpp 中的 NumericVectors 一样。

没有从头开始编写一个全新的数据类型,R 是否为此提供了任何便利?我不认为我可以根据需要使用太奇特的解决方案glmnet识别结果对象。

最佳答案

稀疏矩阵代数R包垃圾邮件 及其垃圾邮件64 扩展支持具有超过 2^31-1 个非零元素的稀疏矩阵。

一个简单的例子(需要约 50 Gb 内存并需要约 5 分钟才能运行):

## -- a regular 32-bit spam matrix
library(spam) # version 2.2-2
s <- spam(1:2^30)
summary(s)
## Matrix object of class 'spam' of dimension 1073741824x1,
## with 1073741824 (row-wise) nonzero elements.
## Density of the matrix is 100%.
## Class 'spam'

## -- a 64-bit spam matrix with 2^31 non-zero entries
library(spam64)
s <- cbind(s, s)
summary(s)
## Matrix object of class 'spam' of dimension 1073741824x2,
## with 2147483648 (row-wise) nonzero elements.
## Density of the matrix is 100%.
## Class 'spam'

## -- add zeros to make the dimension 2^31 x 2^31
pad(s) <- c(2^31, 2^31)
summary(s)
## Matrix object of class 'spam' of dimension 2147483648x2147483648,
## with 2147483648 (row-wise) nonzero elements.
## Density of the matrix is 4.66e-08%.
## Class 'spam'

该实现基于 .C64() 中提供的已编译代码的 R 接口(interface)dotCall64 .

注意:并非 的所有功能垃圾邮件 支持 64 位矩阵(尚未)。

一些链接:
  • https://cran.r-project.org/package=spam
  • https://cran.r-project.org/package=spam64
  • https://cran.r-project.org/package=dotCall64
  • https://doi.org/10.1016/j.cageo.2016.11.015
  • https://doi.org/10.1016/j.softx.2018.06.002

  • 我是 的作者之一dotCall64 垃圾邮件 .

    关于r - 如何在 R 中得到一个大的稀疏矩阵? (> 2^31-1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31861403/

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