data.table 1.12.0 中分组是否并行?

2024-01-02

在变更日志中data.table v1.12.0我注意到以下几点:

取子集、排序和分组现在使用更多并行性

我测试了是否可以加快某些分组的速度,但没有成功。我做了几次不同的测试,但总是得到相同的结果。分组实际上是并行的吗?也许我没有正确使用线程选项?如你看到的data.table已编译为openmp否则setDTthread打印一条消息告诉用户不支持openmp。这是我的一项测试的重现示例。

library(data.table)

n = 5e6
k = 1e4

DT = data.table(x = runif(n), y = runif(n), grp = sample(1:k, n, TRUE))

# Any function not too fast
f = function(x,y) as.list(eigen(cov(cbind(x,y)), only.values = TRUE)$value)

setDTthreads(1)
getDTthreads()
#> [1] 1

system.time(DT[ , f(x,y), by = grp])
#> utilisateur     système      écoulé 
#>       3.365       0.008       3.374

setDTthreads(0)
getDTthreads(T)
#> omp_get_max_threads() = 4
#> omp_get_thread_limit() = 2147483647
#> DTthreads = 0
#> RestoreAfterFork = true
#> [1] 4

system.time(DT[ , f(x,y), by = grp])
#> utilisateur     système      écoulé 
#>       3.324       0.029       3.238

Created on 2019-01-27 by the reprex package https://reprex.tidyverse.org (v0.2.1)


是的,分组在 v 1.12.0 中是并行的

你的基准有点转移注意力。你想要一个fast f(x, y)如果你想隔离分组的速度。使用示例的基数,但使用一个简单的函数,我们得到:

library(data.table)
  packageVersion("data.table")
#> [1] '1.12.0'

n = 5e6
N <- n
k = 1e4

print(getDTthreads())
#> [1] 12

DT = data.table(x = rep_len(runif(n), N),
                y = rep_len(runif(n), N),
                grp = rep_len(sample(1:k, n, TRUE), N))
bench::system_time(DT[, .(a = 1L), by = "grp"])
#>   process      real 
#> 250.000ms  72.029ms

setDTthreads(1)

bench::system_time(DT[, .(a = 1L), by = "grp"])
#>   process      real 
#> 125.000ms 126.385ms

Created on 2019-02-01 by the reprex package https://reprex.tidyverse.org (v0.2.1)

也就是说,我们在并行情况下稍微快一点,但仅快了大约 50 毫秒——与您的函数的 3 秒相比,可以忽略不计。

如果我们缩小 DT 的大小,我们可以看到更显着的差异:

library(data.table)
  packageVersion("data.table")
#> [1] '1.12.0'

n = 5e6
N <- 1e9
k = 1e4

print(getDTthreads())
#> [1] 12

DT = data.table(x = rep_len(runif(n), N),
                y = rep_len(runif(n), N),
                grp = rep_len(sample(1:k, n, TRUE), N))
bench::system_time(DT[, .(a = 1L), by = "grp"])
#> process    real 
#> 45.719s 14.485s

setDTthreads(1)

bench::system_time(DT[, .(a = 1L), by = "grp"])
#> process    real 
#> 24.859s 24.890s
sessioninfo::session_info()
#> - Session info ----------------------------------------------------------
#>  setting  value                       
#>  version  R version 3.5.2 (2018-12-20)
#>  os       Windows 10 x64              
#>  system   x86_64, mingw32             
#>  ui       RTerm                       
#>  language (EN)                        
#>  collate  English_Australia.1252      
#>  ctype    English_Australia.1252      
#>  tz       Australia/Sydney            
#>  date     2019-02-01                  
#> 

Created on 2019-02-01 by the reprex package https://reprex.tidyverse.org (v0.2.1)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

data.table 1.12.0 中分组是否并行? 的相关文章

  • 提取模型摘要并将其存储为新列

    我是新来的purrr范例并正在努力解决它 根据一些来源 我已经设法嵌套一个数据框 在嵌套数据上运行线性模型 从每个 lm 中提取一些系数 并为每个 lm 生成摘要 我想做的最后一件事是从摘要中提取 r squared 我原以为这将是我想要实
  • 如何测试字符串中的前三个字符是r中的字母还是数字?

    下面给出了我拥有的数据集的示例 请注意 总数据集中我有超过两列 ID X 1 MJF34 2 GA249D 3 DEW235R 4 4SDFR3 5 DAS3 我想测试 X 中的前三个字符是否是字母 如果是 那么我想替换该值以仅显示前三个字
  • 拆分并保存在新的 data.frames 中

    我有一个大 data frame 144 列 我想将其分成每组 3 列 子文件或子 data frame 然后将子 data frame 保存在单独的文件中 换句话说 file1 将包含从 1 到 3 的列 file2 将包含从 6 到 9
  • R + ggplot2 - 无法分配大小为 128.0 Mb 的向量

    我有一个 4 5MB 9 223 136 行 的文件 其中包含以下信息 0 0 0 0147938 3 67598e 07 0 0226194 7 35196e 07 0 0283794 1 10279e 06 0 033576 1 470
  • 如何计算满足条件的行数

    假设我有以下数据框 Data1 X1 X2 1 15 1 2 3 1 3 7 0 4 11 1 5 1 0 6 9 0 7 18 0 8 6 1 9 3 1 我想知道如何找到观察的总数X1大于 9 并且X2等于1 我想我需要使用sum 但我
  • 列值的切换功能

    我有一个缩写变量 名称错误地分散在整个列表中 请参阅下面的示例结构 ID lt c SPW SM DLS SJ joe schmoe CEJ teddy roos GVF MJC LH sally fields Full names sho
  • 通过单击堆叠条形图打开选项卡

    我正在使用 R 构建一个包含转发的堆积条形图 ggplot and plotly 如果单击条形图的一部分 我希望打开一个新的浏览器选项卡并显示该特定日期的推文以及指定的转发量 但是 当我单击下面示例中的其中一个栏时 会打开一个不同的链接 表
  • 将 dplyr 中的starts_with与部分列名称的向量一起使用

    我想使用 dplyr 选择与字符串向量匹配的某些列 one lt seq 1 10 two lt rnorm 10 three lt runif 10 1 2 four lt 10 1 df lt data frame one two th
  • 重叠并固定小平面中的 x 尺度(尺度=“自由”)以制作电影

    在另一篇文章中 Justin 的帮助下 我用以下方法绘制了模拟结果facet gridggplot2 中的选项 包含数据和答案的帖子在这里 使用facet grid选项通过ggplot2绘制数据框的列 https stackoverflow
  • 在 r 中使用 SSasymp

    我想我不知道如何在 r 中使用 SSasymp 函数 我想为我的项目创建一个渐近函数 我试过这个 c lt seq 0 200 0 5 d lt SSasymp c 500 0 log 50 plot c d type l log 50 应
  • 在前两个冒号上分割字符串

    我想在前两个冒号上拆分一列字符串 但不在任何后续冒号上拆分 my data lt read table text my string some data 123 34 56 78 100 87 65 43 21 200 a4 b6 c888
  • 在 R 的 stargazer 表中设置注释格式

    我在用stargazer包来生成 回归输出 表 一切都在奇迹般地进行 直到我开始编辑笔记 First 换行很难 但是 Bryansuggests https stackoverflow com questions 21720264 star
  • 有条件地将字符串转换为特定数值

    我确信对此有一个简单的答案 但我已经扫描了堆栈溢出 但无法找到解决方案 似乎 sapply 和 ifelse 函数的组合可能可以完成这项工作 但我不确定 所以我有一个包含字符的数据框 除了一列是数值 Create dataframe whi
  • 将从数据透视表包生成的数据透视表转换为数据帧

    我正在尝试制作一个数据透视表pivottabler包裹 我想将数据透视表对象转换为数据框 以便我可以将其转换为数据表 带有 DT 并在 Shiny 应用程序中渲染它 以便可以下载 library pivottabler pt qpvt mt
  • R - 对矩阵的每行/列应用具有不同参数值的函数

    我试图将函数应用于矩阵的每一行或每一列 但我需要为每一行传递不同的参数值 我以为我熟悉 lapply mapply 等 但可能还不够 举个简单的例子 gt a lt matrix 1 100 ncol 10 gt a 1 2 3 4 5 6
  • 使用 R 中“rpart”包中的生存树来预测新的观察结果

    我正在尝试使用 R 中的 rpart 包来构建生存树 并且我希望使用这棵树来对其他观察结果进行预测 我知道有很多涉及 rpart 和预测的问题 但是 我还没有找到任何解决 我认为 特定于将 rpart 与 Surv 对象一起使用的问题的方法
  • 如何将xtable对象放置在页面左侧

    问题 如何将 xtable 对象放置到页面左侧或如何全局禁用居中 我正在努力弄清楚如何将 xtable 对象放置在左侧 我有一个 Rmd 文件 所有这些都转到相关的 r 块 require xtable df lt data frame x
  • R 版本 4.0.0 上的 ROracle

    当尝试使用 ROracle 时 我收到以下错误消息 gt library ROracle Error package or namespace load failed for ROracle package ROracle was inst
  • 在r中的数据框中循环线性回归输出

    我有一个下面的数据集 我想在其中对每个国家和州进行线性回归 然后绑定数据集中的预测值 添加另外三列后的最终数据框 我已经对一个国家和一个地区进行了此操作 但想对每个国家和地区进行此操作 并将预测值 上限值和下限值放回到cbind的数据集中
  • 获得各州的边界

    编辑7 经过相当多的帮助后 我已经能够得到一张接近我需要的结果的地图 但我仍然需要在地图上显示州边界 但我无法弄清楚 为了制作一个合适的可重现示例 我需要链接到数据集 因为输出太大 为了使事情变得简单 我只对三个状态进行子集化 但边界线不显

随机推荐

  • 了解所需的类和存在的类

    我下载了一个框架和代码 我有一个关于require and include vs class exists 在我下载的代码中 我看到 require once class php 也 if class exists class false
  • 与推送功能相同的指令序列

    我想知道是否有可能 如果可以 如何 编写一系列具有相同效果的指令push 例如 如果内容ax是1200 我做了一个push ax 我还可以使用哪些其他指令来完成什么push ax does 其他一些答案使用 sp 用于堆栈寻址 但在 16
  • 剧本中的 Vars_prompt

    这是我的剧本 hosts alpha vars company vogo tasks name debugging debug msg ansible hostname vars prompt name company prompt Whe
  • 如何避免 pandas 将字符串转换为日期格式

    我有下面的代码 它检查日期是否在开始日期和结束日期之间并返回其文件名 import pandas as pd def loaddata global dict1 dict1 with open load csv mode r as f fo
  • 从 MATLAB 脚本内部删除是否安全?

    在 MATLAB 中 我们可以将以下内容放入名为的脚本中me m delete me m 运行脚本后 它会自行删除 这样的事情在 MATLAB 中安全吗 当您调用该脚本时 该脚本会由 MATLAB 进行编译 编译后的脚本会加载到内存中 然后
  • 二维圆最近邻的最佳动态数据结构

    标题是最大的问题 我有一组圆 每个圆都有一个圆心 C 和半径 r 两个圆之间的距离是它们的圆心之间的欧几里得距离减去它们的半径 对于圆 a 和 b d ab C a C b r a r b 请注意 如果圆圈重叠 则该值可能为负 那么 查找集
  • 在 Java 中使用任意对象作为 Map 键有什么缺点吗?

    我的应用程序中有两种对象 其中一种对象恰好有一个对应的另一种对象 跟踪这种关系的明显选择是Map
  • tinyXML 元素访问的运行时错误

    昨天是我的第一次尝试 我试图在以下 new xml 文件中捕获变量 time
  • 更有效地查找两个日期之间有保险的员工

    我需要检索员工列表 以及每个员工在给定年份中积极享受福利的月份列表 有一个包含工作数据的表和一个包含福利信息的表 还有一个交付日期表 列出了 2007 年至 2018 年的每个日期 并显示了每个日期的月份 月份和日历年 我现在编写查询的方式
  • Django Rest Framework 发布主键 uuid 或自动生成

    以下链接对我帮助很大 参考 https stackoverflow com questions 31687423 create uuid on client and save primary key with django rest fra
  • 测量外部程序使用的时间、内存量和 CPU

    我正在通过 Python 执行外部程序 我想知道调用外部程序的最佳选择是什么subprocess Popen 或与subprocess call 另外 我需要测量外部程序使用的时间 内存量和 CPU 量 我听说过psutil 但我真的不知道
  • 是否有 Android 意图来恢复应用程序或再次打开它?

    在我的 Android 应用程序中 此代码将打开 恢复活动 NotificationManager notificationManager NotificationManager context getSystemService Conte
  • 如何将 JSONObject 转换为字节数组,然后转换此字节数组以获取原始 JSONObject? [复制]

    这个问题在这里已经有答案了 我正在使用AWS JSONObject class http docs aws amazon com AWSJavaSDK latest javadoc com amazonaws util json JSONO
  • jQuery - 使用替换 div 选择/取消选择多选选项

    我正在研究一种模态多选替换 需要
  • 在 Pandas Python 中读取 XLSB 文件

    关于这一点有很多问题 但关于如何将 xlsb 文件读入 pandas 还没有简单的答案 是否有捷径可寻 随着1 0 0释放大熊猫 January 29 2020 添加了对二进制 Excel 文件的支持 import pandas as pd
  • Eclipse 中的 Liferay 开发 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用/引用在同一 json 架构中生成的字段值

    我正在尝试使用创建模拟数据json server结合json schema faker 我试图使用 ref属性 但我知道这仅引用类型而不是确切的值 有没有办法重用完全相同的值而不仅仅是其类型 我的架构mockDataSchema js文件是
  • TFS 结构 - 多个项目还是单个项目?

    我们的小型开发工作室正在寻求将我们的项目从 VSS 迁移到 TFS 并且我们正在评估 TFS 与其他方案 尚未启动 我们软件商店的性质是这样的 我们在 VSS 中拥有 100 多个项目 从小型的单人表演项目到大规模的企业级应用程序 我们正在
  • 在 HighStock 图表导航器中禁用把手

    我搜索了 API 有很多关于禁用滚动条和导航器以及设置其样式的示例 我想保持两者完好无损 但禁用车把可拖动 我尝试使用这个小提琴上的样式 http jsfiddle net gh get jquery 1 7 2 highslide sof
  • data.table 1.12.0 中分组是否并行?

    在变更日志中data table v1 12 0我注意到以下几点 取子集 排序和分组现在使用更多并行性 我测试了是否可以加快某些分组的速度 但没有成功 我做了几次不同的测试 但总是得到相同的结果 分组实际上是并行的吗 也许我没有正确使用线程