首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理超大数据帧上的计算的更快方法

处理超大数据帧上的计算的更快方法
EN

Stack Overflow用户
提问于 2019-07-15 16:47:50
回答 1查看 104关注 0票数 0

我正在处理几个全部为61,143行和9,864列的数据帧。这使得每个数据帧中的值略高于6亿。这使得数据帧上的任何计算都非常慢-几个小时。例如:

代码语言:javascript
复制
OBS    61143 obs. of 9864 variables

OBS.MAX <- apply(OBS, 1, max)

这些值最初是从netcdf文件派生出来的,然后我将该文件从光栅砖块转换为数据帧。有没有更快的方法可以完成像上面这样的计算?在这样的数据帧中工作效率低吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-15 22:12:11

与一些示例数据交谈总是更容易一些

代码语言:javascript
复制
library(raster)
b <- brick(ncol=245, nrow=250, nl=9864)
v <- matrix(rep(1:ncell(b), nlayers(b)), ncol=nlayers(b))
values(b) <- v
bb <- writeRaster(b, "test.nc", overwrite=TRUE)
d <- data.frame(v)

现在,我得到了以下内容

代码语言:javascript
复制
# matrix 
system.time(apply(v, 1, max))
#   user  system elapsed 
#  10.68    0.79   11.46 

# data.frame
system.time(apply(d, 1, max))
#   user  system elapsed 
#  20.48    0.61   21.11 

# RasterBrick (values in memory)
system.time(max(b))
#   user  system elapsed 
#   6.72    0.29    7.00 

system.time(calc(b, max))
#   user  system elapsed 
#  16.76    0.33   17.11 

# RasterBrick (values on disk)
system.time(max(bb))
#   user  system elapsed 
#  19.25    8.43   27.70 

system.time(calc(bb, max))
#   user  system elapsed 
#  22.69    5.92   28.62 

基于此,我将使用RasterBrickmax (或者更一般的calc ),因为从文件中提取值也需要时间

代码语言:javascript
复制
system.time( values(bb))
#   user  system elapsed 
#  21.91    5.28   27.18 

但这在很大程度上取决于你的工作流程-例如,每个数据集有多少计算。这些计算需要一段时间,但您会报告“几个小时”的计算。这表明问题出在您正在应用的函数中。也许你需要重写这些。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57036203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档