如何在R中快速显示大型矩阵?
我有时使用大型数字矩阵(例如3000 x 3000),并且快速可视化它们是一个非常有用的质量控制步骤。这在我以前选择的语言Matlab中非常简单快捷。例如,显示1000x1000矩阵需要0.5秒:
rand_matrix = rand(1000,1000);
tic
imagesc(rand_matrix)
toc
>> Elapsed time is 0.463903 seconds.
我喜欢R中相同的权力,但遗憾的是可视化矩阵在R 中似乎非常慢。例如,使用image.plot()
相同的随机矩阵需要超过10秒才能显示:
require(tictoc)
require(image.plot)
mm = 1000
nn = 1000
rand.matrix = matrix(runif(mm*nn), ncol=mm, nrow=nn)
tic("Visualizing matrix")
image.plot(rand.matrix)
toc()
> Visualizing matrix: 11.744 sec elapsed
随着矩阵越来越大,问题越来越严重。例如,与Matlab中的秒数相比,3000x3000矩阵在R中可视化需要几分钟。这显然不适用于数据探索。我尝试过ggplot,而熔化+ geom_raster()仍然需要一分钟。
我做错了什么?有没有一种可视化R中矩阵的快速方法?理想的解决方案需要一两行。
答案 0 :(得分:5)
使用image(m, useRaster = TRUE)
时,我很快得到了一个情节:
start = Sys.time()
image(rand.matrix, useRaster = TRUE)
print(Sys.time() - start)
# Time difference of 0.326 secs
如果没有useRaster = TRUE
这需要1.5秒,useRaster
会加快速度,但我认为这只适用于简单,均匀间隔的点。
如果你的最终目标是用这个图生成一个图像文件,那么我认为直接输出像png这样的栅格格式可能是最有效的,尽管测量R需要多长时间来保存它有点棘手图像文件,例如:
png("image_plot.png", width = 1000, height = 1000)
image(rand.matrix, useRaster = TRUE)
dev.off()