加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

表现 – 在R中交叉列出两个大量逻辑向量的最快方式

发布时间:2020-12-14 04:19:29 所属栏目:大数据 来源:网络整理
导读:对于两个逻辑向量,x和y的长度 1E8,计算2×2交叉表的最快方法是什么? 我怀疑答案是写在C/C++中,但是我想知道R中是否有一些已经非常聪明的问题,因为这并不罕见. 示例代码,对于300M条目(如果3E8太大,请随意让N = 1E8;我选择的总大小只有2.5GB(2.4GB),我的目标
对于两个逻辑向量,x和y的长度> 1E8,计算2×2交叉表的最快方法是什么?

我怀疑答案是写在C/C++中,但是我想知道R中是否有一些已经非常聪明的问题,因为这并不罕见.

示例代码,对于300M条目(如果3E8太大,请随意让N = 1E8;我选择的总大小只有2.5GB(2.4GB),我的目标是0.02的密度,只是为了使它更有趣使用稀疏向量,如果这有帮助,但类型转换可能需要时间).

set.seed(0)
N = 3E8
p = 0.02
x = sample(c(TRUE,FALSE),N,prob = c(p,1-p),replace = TRUE)
y = sample(c(TRUE,replace = TRUE)

一些明显的方法:

>表
大笨蛋
>简单逻辑运算(例如sum(x& y))
>矢量乘法(boo)
> data.table
>上面的一些,与多核包(或新的并行包)并行,

我已经采取了前三个选项(见我的答案),但我觉得必须有更好更快的东西.

我发现表格工作非常缓慢. bigtabulate似乎像一个逻辑向量的过度杀戮.最后,做香草逻辑操作看起来像一个kludge,它看起来每个向量太多次(3X?7X?),更不用说在处理过程中填充了大量的内存,这是一个巨大的时间浪费.

矢量乘法通常是一个坏主意,但是当矢量稀疏时,可以从存储它中获得优点,然后使用矢量乘法.

随意变化N和p,如果这将演示任何有趣的行为的列表功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读