【问题标题】:Can this plot_normal_distribution function be optimized?这个 plot_normal_distribution 函数可以优化吗?
【发布时间】:2020-12-03 16:12:32
【问题描述】:

我尝试优化我几周前编写的函数。 它变得更好,但它仍然很慢。所以我使用了Rprof(),发现split() 花费的时间最多,这让我觉得这个功能可以做得更好。

可以吗?!

normDist_V2 <- function(size=1e5, precision=1, ...)
{
  data <- rnorm(size) 
  roundedData <- round(data, precision) 
  framedData <- data.frame(cbind(data, roundedData))
  factoredData <- split(framedData$data, framedData$roundedData)
  actualsize <- (size)/10^precision
  X <- names(factoredData)
  Probability <- sapply(factoredData, length) / actualsize
  plot(X, Probability, ...)
}

当前速度:

system.time(normDist_V2(size=1e7, precision = 2)) #11.14 sec

【问题讨论】:

  • 先生您好。桑帕蒂。您能否发布数据示例,以便我们可以在尽可能接近您的环境的情况下运行代码?

标签: r performance optimization


【解决方案1】:
normDist_V2 <- function(size = 1e5, precision = 1, ...) {
  require(data.table)
  data <- rnorm(size)
  roundedData <- round(data, precision)
  framedData <- data.table(data, roundedData)
  actualsize <- (size)/10^precision
  dt <- framedData[, .N, keyby = roundedData]
  X <- dt$roundedData
  Probability <- dt$N/actualsize
  plot(X, Probability, ...)
}

system.time(normDist_V2(size=1e7, precision = 2)) # 1.26 sec

【讨论】:

  • 你能多解释一下你做了什么以及为什么它更快(即使用data.table)吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多