r - 检查非有限值的大型稀疏矩阵的有效方法

标签 r performance matrix sparse-matrix

我有一个大的稀疏矩阵。在用一些数学运算填充矩阵后,我意识到由于除以零错误,我有一些无穷大的值。如何检查此矩阵的非有限值?

这是一个玩具矩阵。

A <- Matrix(nrow = 150000, ncol = 150000, data = 0, sparse = TRUE)
A[1, 1] = Inf
A[1, 3] = NA
A[2, 1] = -Inf

试图找到它的非有限值给我一个错误:

test <- A[!is.finite(A)]
#Error: cannot allocate vector of size 83.8 Gb

我也试着逐行扫描这个矩阵,但它需要很长时间。

library(magrittr)

for(i in 1:nrow(A)){
    if((
        A[i, ] %>% .[!is.finite(.)] %>% length
    ) > 0) print(i)
}

然后我尝试并行运行它,但我认为这太过分了。更何况,还需要很长时间。

library(parallel)
library(magrittr)

numCores <- detectCores() - 1
cl <- makeCluster(numCores)
clusterExport(cl, c("A"))
clusterEvalQ(cl, library(magrittr))
out <- A %>% nrow %>% seq %>% parLapply(cl, X = ., function(i) A[i, ] %>% .[!is.finite(.)]) 

我该如何继续?

最佳答案

如果我们想知道一个稀疏矩阵 A有任何 Inf , -Inf , NaNNA , 我们可以做到

any(!is.finite(A@x))
#[1] TRUE

如果我们也想知道他们的位置,我们可以这样做

subset(summary(A), !is.finite(x))
  i j    x
1 1 1  Inf
2 2 1 -Inf
3 1 3   NA

备注:

参见 R: element-wise matrix division is.infinite 之间的区别, !is.finite , is.nais.nan .

关于r - 检查非有限值的大型稀疏矩阵的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73253735/

相关文章:

r - 扩展 R S4 对象以具有新插槽并保持原始对象以相同方式工作

python - 使用 "=="比较数字与零或将数字与 bool 值比较之间是否有很大差异?

写入二进制文件的字符矩阵

python - 使用 sympy 计算矩阵的伪逆

r - 创建多个描述性表格(带循环)并在 R 中存储为数据帧

r - 降级gbm, "Generalized Boosted Regression Models"包

r - 如何根据 Shiny R 脚本的格式为 "%d/%m/%Y %H:%M:%S"的时间戳列对数据帧进行排序

java - 自动装箱的性能影响

java - 如何为一个巨大的字符串列表计算一个好的哈希码?

arrays - Excel中的Concat Arrays单元格