You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提升data.table分组运算效率?(大规模行组合场景)

优化行组合成对运算的效率问题

我需要对数据框中所有行的两两组合进行运算对比。虽然用了data.table分组配合自定义函数,但当行组合数达到数十万级时,整体运行速度慢得离谱。

示例数据集代码

set.seed(23)
my_df <- matrix(data = rnorm(6000, mean = 100, sd = 10), nrow = 200, ncol = 30)
my_df <- data.table::data.table(as.data.frame(my_df))

初始实现步骤

  • 创建包含所有行组合的data.table:
    plot_combs <- data.table::data.table(t(combn(seq(nrow(my_df)), 2)))
    
  • 定义分组运算函数:
    .PLOT_COMP <- function(x){
      .sd_my_df <- my_df[as.numeric(i),]
      outer(t(as.matrix(.sd_my_df[1, ])), t(as.matrix(.sd_my_df[2, ])), pmin) * 2
    }
    
  • 执行并计时:
    system.time(plot_combs[, .PLOT_COMP(.SD), by = seq(nrow(plot_combs))][,-1])
    

问题点

单个.PLOT_COMP函数执行几乎瞬间完成,但整体批量运算却耗时极长,急需大幅提升效率。

已完成的优化

基于Gregor Thomas的建议优化后,运行时间从原来的超一分钟降到了0.02秒,优化后的代码如下:

my_df <- t(matrix(data = rnorm(6000, mean = 100, sd = 10), nrow = 200, ncol = 30))
plot_combs_m <- combn(seq(nrow(my_df)), 2)

system.time(for(i in seq(nrow(plot_combs_m))){
  my_plots <- plot_combs_m[,i]
  outer(my_df[,my_plots[1]], my_df[,my_plots[2]])
})

寻求进一步优化方案

现希望找到能进一步提升该运算效率的方法。

内容的提问来源于stack exchange,提问作者nateroe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 23:34:59