我在R中有一个很大的稀疏矩阵(dgCMatrix),我想知道这个矩阵每个元素的指数.更准确地说,我想对矩阵的每个元素执行1-exp(-x).不幸的是,当我在R中这样做时,有一个sparse->dense coercion,它需要大量的时间和内存(见下面的例子).

library(Matrix)
i <- sample(20000, 20000); j <- sample(20000, 20000); x <- 7 * (1:20000)
A <- sparseMatrix(i, j, x = x)
1 - exp(-A)

有没有办法在R中避免这种胁迫?当1-exp(0)为0时,或许可以保持稀疏性.

推荐答案

也许你可以试一试

A@x <- 1 - exp(-A@x)

以便您仅更新非稀疏条目.


对于非常小的A@x,我们可以使用

A@x <- -expm1(-A@x) # thanks for the comment from jblood94

或者只是简单地

A <- -expm1(-A) # thanks for the comment from Ben Bolker

R相关问答推荐

是否可以通过另一个DF的内容过滤数据帧列表?

返回句子中最长的偶数长单词

即使声明引发错误,R函数也会在第二次try 时返回结果

删除facet_wrap标签之间的水平线

如何在ggplot 2线性图的每个方面显示每个组的误差条?

更改编号列表的 colored颜色

在"gt"表中添加第二个"groupname_col",而不连接列值

在GGPLATE中将突出的点放在前面

从服务器在Shiny中一起渲染图标和文本

当我添加美学时,geom_point未对齐

R:如果为NA,则根据条件,使用列名模式将缺少的值替换为另一列中的值

我如何go 掉盒子图底部的数字?

正则表达式在第二个管道和第二个T之后拆分R中的列

R中的类别比较

在使用具有Bray-Curtis相似性的pvCluust时计算p值

观察器中的inaliateLater的位置

为什么这个表格格罗布不打印?

R -基线图-图形周围的阴影区域

为什么函数toTitleCase不能处理english(1),而toupper可以?

按组跨多列创建伪变量