问题标签 [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.
r - 将 big.matrix 中的所有非零数字更改为 1
如何在使用类对象时将所有非零值更改为 1 big.matrix
?如果我转换为普通矩阵,对象大小超过 2gb(10^7 列,100 行),所以这是不可行的。
谢谢!
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。
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?
r - 如何将大矩阵转换为表格?
我有一个用于 read.big.matrix() 中的 .desc 文件,来自 bigmemory 包,用于创建 big.matrix。我怎样才能将它作为表格打开?
我试过 as.table() 并得到错误“无法强制到表”。
r - 将矩阵列表组合成一个 big.matrix
我在 R 中有一个大型 (35000 x 3) 矩阵列表,我想将它们组合成一个矩阵,但它的长度约为 10 亿行,并且会超过 R 中的最大对象大小。
bigmemory包允许更大的矩阵,但似乎不支持rbind
将多个矩阵放在一起。
是否有其他一些包或技术支持从较小的矩阵创建一个非常大的矩阵?
同样在您问这不是 RAM 问题之前,即使在 64 位 R 上也只是 R 限制。
r - 尽管使用 bigmatrix 并且只发送描述符,为什么我的工作人员开始我的大矩阵乘法需要这么长时间?
我想实现操作的并行化版本M %*% t(M)
。我有一台具有 100 个内核和共享内存/硬盘驱动器的机器,我想尽可能高效地使用它。
因为我的矩阵很大(20000x15000),所以我想避免拆分矩阵并将块直接发送给工作人员,因为这是连续发生的。
相反,通过使用该bigmemory
包,我只能将矩阵描述符和行索引发送给我的工人。这是小数据,所以每个工人都应该很快得到“简报”。然后,每个工作人员将并行附加共享内存中的矩阵。输出矩阵也是如此,每个worker并行写入(当然,每个写入不同的行)
但是问题是,工人开始工作仍然需要很长时间,这导致我不能使用所有工人的情况,因为当最后一个工人开始时,第一个工人就完成了。下面是 htop 的屏幕截图,您可以在其中看到情况。
此外,直到下一个工人开始所需的持续时间变长,输入矩阵越大。我不明白这一点。正如您在下面看到的mult
,我并行执行的函数得到一个整数向量 2(第一行/最后一行)和两个由bigmemory::describe
;创建的对象。这些对象不依赖于输入矩阵的大小。为什么工人需要更长的时间才能开始更大的矩阵?
截图htop
:
MCVE
matOuter
下定义。执行:
函数定义:
会话信息
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 机器。
谢谢!
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 的结果:
r - 大矩阵的线性回归
我想用大矩阵执行线性回归。
这是我到目前为止所尝试的:
我怎么解决这个问题?