问题标签 [r-bigmemory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
55 浏览

r - 将 big.matrix 中的所有非零数字更改为 1

如何在使用类对象时将所有非零值更改为 1 big.matrix?如果我转换为普通矩阵,对象大小超过 2gb(10^7 列,100 行),所以这是不可行的。

谢谢!

0 投票
0 回答
140 浏览

r - 在 Rcpp 中使用 fisher.test 中的 big.matrix 列

我有一个非常大的二进制 big.matrix 以及一个类分配向量(与 big.matrix 的行数相同的长度)。

我希望能够遍历 big.matrix 的每一列并为每个 fisher.test 输出 p 值。

使用普通的矩阵对象,我可以执行以下操作,但是将我的 big.matrix 转换为矩阵需要超过 5 GB 的内存。

如何在不转换为矩阵对象的情况下做到这一点?据我了解,访问 big.matrix 的元素需要 C++ 代码,但我对此一点也不熟悉。

这里它展示了如何在 Rcpp Rcpp 中执行fisher.test:Rcpp 中是否有实现 fisher.test()但我不确定如何将矩阵的每一列输入到其中。

一个例子 big.matrix 看起来像

我的类变量看起来像:

谢谢!

编辑:

这是我现在拥有的 Rcpp 代码。如果有人可以帮助我找出问题所在,我将不胜感激。

理想情况下,我希望能够遍历 C++ 本身中的每一列,并将 p 值输出到 R。

0 投票
1 回答
203 浏览

r - Problems with SVD of a large matrix using bigmemory and irlba

I am currently trying to implement a SVD of a very large matrix using bigmemory and irlba. As far as I understand I have to adjust the mult command in the irlba package, which I have done like this:

However, it does not work to run an SVD on a bigmatrix using irlba:

For replicability here is an example of a big matrix I want to do a SVD on:

This is the error message I get:

Does anyone have an idea how to avoid this error?

0 投票
1 回答
225 浏览

r - 如何将大矩阵转换为表格?

我有一个用于 read.big.matrix() 中的 .desc 文件,来自 bigmemory 包,用于创建 big.matrix。我怎样才能将它作为表格打开?

我试过 as.table() 并得到错误“无法强制到表”。

0 投票
2 回答
771 浏览

r - 将矩阵列表组合成一个 big.matrix

我在 R 中有一个大型 (35000 x 3) 矩阵列表,我想将它们组合成一个矩阵,但它的长度约为 10 亿行,并且会超过 R 中的最大对象大小

bigmemory包允许更大的矩阵,但似乎支持rbind将多个矩阵放在一起。

是否有其他一些包或技术支持从较小的矩阵创建一个非常大的矩阵?

同样在您问这不是 RAM 问题之前,即使在 64 位 R 上也只是 R 限制。

0 投票
0 回答
44 浏览

r - 尽管使用 bigmatrix 并且只发送描述符,为什么我的工作人员开始我的大矩阵乘法需要这么长时间?

我想实现操作的并行化版本M %*% t(M)。我有一台具有 100 个内核和共享内存/硬盘驱动器的机器,我想尽可能高效地使用它。

因为我的矩阵很大(20000x15000),所以我想避免拆分矩阵并将块直接发送给工作人员,因为这是连续发生的。

相反,通过使用该bigmemory包,我只能将矩阵描述符和行索引发送给我的工人。这是小数据,所以每个工人都应该很快得到“简报”。然后,每个工作人员将并行附加共享内存中的矩阵。输出矩阵也是如此,每个worker并行写入(当然,每个写入不同的行)

但是问题是,工人开始工作仍然需要很长时间,这导致我不能使用所有工人的情况,因为当最后一个工人开始时,第一个工人就完成了。下面是 htop 的屏幕截图,您可以在其中看到情况。

此外,直到下一个工人开始所需的持续时间变长,输入矩阵越大。我不明白这一点。正如您在下面看到的mult,我并行执行的函数得到一个整数向量 2(第一行/最后一行)和两个由bigmemory::describe;创建的对象。这些对象不依赖于输入矩阵的大小。为什么工人需要更长的时间才能开始更大的矩阵?

截图htop

htop 输出

MCVE

matOuter下定义。执行:

函数定义:

会话信息

0 投票
1 回答
115 浏览

r - R中几个big.matrix对象的元素平均值

我有 17 个 filebacked big.matrix 对象(dim 10985 x 52598,每个 4.3GB),我想计算其中的元素平均值。结果可以存储在另一个 big.matrix (gcm.res.outputM) 中。

biganalytics::apply() 不起作用,因为 MARGIN 只能设置为 1 或 2。我尝试使用 2 for 循环,如此处所示

每行 i 大约需要 1.5 分钟,因此运行大约 11 天。

有人对如何加快计算速度有任何想法吗?我正在使用具有 16GB RAM 的 64x Windows10 机器。

谢谢!

0 投票
1 回答
201 浏览

r - 如何在 Rcpp 中对 bigstatsr::FBM 的行或列进行子集化并将它们存储在向量中?

我有一个从给定矩阵的行(或列)计算基本汇总统计信息的函数,我现在正在尝试将此函数与 bigstatsr::FBM 一起使用(我知道使用列应该更有效)。我想将行/列存储在向量中的原因是我想用 std::nth_element 计算分位数。如果没有向量有不同的方法可以做到这一点,我会同样高兴。

这是我用于常规矩阵的代码。

然而,我很难用 FBM 做到这一点,因为我没有完全掌握 FBM - Pointer 工作原理的复杂性。

我尝试了以下但没有成功:

任何帮助将不胜感激,谢谢!

更新 - big_apply - 方法

我用两个不同大小的矩阵 X1 和 X2 实施了两次该方法。X1 的代码:

当使用 X1 和 block.size = 500 时,使用 4 个内核而不是 1 个内核会使我的 PC 上的任务慢 5-10 倍(不幸的是,4 个 CPU 和使用 Windows)。使用更大的矩阵 X2 并将 block.size 保留为默认值,使用 4 个内核而不是非并行版本需要 10 倍的时间。

X2 的结果:

0 投票
2 回答
597 浏览

r - 大矩阵的线性回归

我想用大矩阵执行线性回归。

这是我到目前为止所尝试的:

我怎么解决这个问题?

0 投票
1 回答
1207 浏览

r - 并行大矩阵乘法

我需要将两个大矩阵相乘AB如下所示:

我怎样才能并行计算这个乘法?

到目前为止,我遇到的唯一教程是这个

但我不确定如何将其付诸实践。也可能有更简单/更有效的方法来实现相同的结果?