【发布时间】:2018-06-15 21:14:12
【问题描述】:
我正在寻找 R(或 Rcpp)中将给定的双精度矩阵(值介于 0 和 1 之间)转换为具有十六进制颜色代码的图像光栅的最快方法。
目前我正在做的是
library(RColorBrewer)
cols=colorRampPalette(RColorBrewer::brewer.pal(11, "RdYlBu"))(1080)
colfun=colorRamp(RColorBrewer::brewer.pal(11, "RdYlBu"))
mat=matrix(seq(1:1080)/1080,ncol=1920,nrow=1080,byrow=FALSE)
system.time(rastmat <- as.raster(apply(mat, 2, function (col) rgb(colfun(col),max=255)))) # 2.55s
但这对我的应用程序来说太慢了(我希望能够在 0.1 秒内完成)。有人知道如何有效地做到这一点吗?使用颜色函数colfun 或使用cols 作为(哈希?)查找表或类似的东西(在将数据矩阵合并为cols 的长度之后)(以更快者为准)...
稍后将使用
显示光栅library(grid)
system.time(grid.raster(rastmat,interpolate=FALSE)) # 0.2s
【问题讨论】:
-
您可以使用
foreach()或mclapply()来并行化您的apply函数。这实际上取决于操作系统和可用内核的数量 -
你的 R 版本和你的 CPU 是什么?您的代码在我的计算机(R 3.4、Intel core i7、Linux)上运行时间为 0.6 秒
-
Ha Intel core i7 和 R 3.4.0 但 Win 8.1。所以 mclapply() 不会是一个选项 - 我想 Rcpp 和 OpenMP 的多线程是最有效的,认为下面的解决方案已经相当高效......
标签: r graphics colors rcpp raster