gpt4 book ai didi

r - 在R中申请sparseMatrix

转载 作者:行者123 更新时间:2023-12-05 07:55:20 25 4
gpt4 key购买 nike

我想知道是否有一种方法可以在 R 中的 sparseMatrix(来自 Matrix 包)上执行某种 apply 函数来削减k 上的列等数群?

是否可以只对列中大于 0 的元素进行分组

对于小型 sparseMatrix 代码看起来像这样,但我打赌它不会在更大的矩阵上有效地工作。

library(Matrix)
i <- c(1:8, rep(8,7)); j <- c(1:8, 1:7); x <- c(8 * (1:8),1:7)
(A <- sparseMatrix(i, j, x = x))
#8 x 8 sparse Matrix of class "dgCMatrix"

[1,] 8 . . . . . . .
[2,] . 16 . . . . . .
[3,] . . 24 . . . . .
[4,] . . . 32 . . . .
[5,] . . . . 40 . . .
[6,] . . . . . 48 . .
[7,] . . . . . . 56 .
[8,] 1 2 3 4 5 6 7 64
>
"
> k<- 2
> apply(A,2,function(element){
+ cut(element,
+ k)})
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] "(4,8.01]" "(-0.016,8]" "(-0.024,12]" "(-0.032,16]" "(-0.04,20]" "(-0.048,24]" "(-0.056,28]" "(-0.064,32]"
[2,] "(-0.008,4]" "(8,16]" "(-0.024,12]" "(-0.032,16]" "(-0.04,20]" "(-0.048,24]" "(-0.056,28]" "(-0.064,32]"
[3,] "(-0.008,4]" "(-0.016,8]" "(12,24]" "(-0.032,16]" "(-0.04,20]" "(-0.048,24]" "(-0.056,28]" "(-0.064,32]"
[4,] "(-0.008,4]" "(-0.016,8]" "(-0.024,12]" "(16,32]" "(-0.04,20]" "(-0.048,24]" "(-0.056,28]" "(-0.064,32]"
[5,] "(-0.008,4]" "(-0.016,8]" "(-0.024,12]" "(-0.032,16]" "(20,40]" "(-0.048,24]" "(-0.056,28]" "(-0.064,32]"
[6,] "(-0.008,4]" "(-0.016,8]" "(-0.024,12]" "(-0.032,16]" "(-0.04,20]" "(24,48]" "(-0.056,28]" "(-0.064,32]"
[7,] "(-0.008,4]" "(-0.016,8]" "(-0.024,12]" "(-0.032,16]" "(-0.04,20]" "(-0.048,24]" "(28,56.1]" "(-0.064,32]"
[8,] "(-0.008,4]" "(-0.016,8]" "(-0.024,12]" "(-0.032,16]" "(-0.04,20]" "(-0.048,24]" "(-0.056,28]" "(32,64.1]"

最佳答案

三种可能的方法:

  1. 将稀疏矩阵转换为data.table
  2. 转换为 simple_triplet_matrix 并使用 slam 包中的 rollup 函数。
  3. 将稀疏矩阵转换为列列表并使用 vapply

选项 1 和 3 支持对列进行并行处理。选项 3 的依赖性最少。一个implementation选项 3 作为 quminorm 包的一部分提供。如果我有时间,我可能会在将来把它分拆成一个单独的包。请注意,对于还需要零值的函数,最好的方法是使用 slam 包中的函数 colapply_simple_triplet_matrix

这是一个vignette在速度和内存消耗方面比较各种不同的方案。

关于r - 在R中申请sparseMatrix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29901199/

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