heatmap和heatmap.2的执行时间差
Execution time difference between heatmap and heatmap.2
我试图可视化相当大的矩阵(即 10000 x 100
)。如果我假设我对在列或行上执行的任何额外聚类不感兴趣(这可能是有问题的,因为维度很高),这似乎是可行的。
我从 gplots
包中的增强 heatmap.2
开始。由于我想忽略聚类或重新排序,根据文档和堆栈建议(例如 ),我设置了适当的参数
heatmap.2(some_data, Rowv = FALSE, Colv = FALSE, dendrogram = "none", trace="none")
但是结果发现执行时间很长,好像是二次取决于行数,果然如此。请参阅下图中的依赖关系。
另一方面,当我使用 stats
中的基本 heatmap
函数并抑制树状图时
heatmap(same_data, Rowv = NA, Colv = NA)
计算执行时间是线性并且完全可以忽略不计。
下面是执行时间的对比
我用来生成上述图表数据的代码是
num.rows <- c(100, 500, 1000, 1500, 2000, 2500, 3000)
times.heatmap.2 <- sapply(num.rows, function(rown){
m <- matrix(rnorm(rown*50), rown, 50)
system.time(tmp <- gplots::heatmap.2(m, Rowv = FALSE, Colv = FALSE, dendrogram = "none", trace="none"))
})
times.heatmap <- sapply(num.rows, function(rown){
m <- matrix(rnorm(rown*50), rown, 50)
system.time(tmp <- heatmap(m, Rowv = NA, Colv = NA))
})
最后,问题。
- 有谁知道为什么
heatmap.2
有这么长的执行时间并且可能对数据大小有二次依赖,即使它应该忽略任何二次操作(例如聚类)?
- 有没有我应该使用的参数,或者我们应该深入研究函数的源代码来诊断问题?
你可以试试这个:
install.packages("heatmap3")
num.rows <- c(100, 500, 1000, 1500, 2000, 2500, 3000)
times.heatmap.3 <- sapply(num.rows, function(rown){
m <- matrix(rnorm(rown*50), rown, 50)
system.time(tmp <- heatmap3(m, Rowv = FALSE, Colv = FALSE, dendrogram = "none", trace="none"))
})
我试图可视化相当大的矩阵(即 10000 x 100
)。如果我假设我对在列或行上执行的任何额外聚类不感兴趣(这可能是有问题的,因为维度很高),这似乎是可行的。
我从 gplots
包中的增强 heatmap.2
开始。由于我想忽略聚类或重新排序,根据文档和堆栈建议(例如
heatmap.2(some_data, Rowv = FALSE, Colv = FALSE, dendrogram = "none", trace="none")
但是结果发现执行时间很长,好像是二次取决于行数,果然如此。请参阅下图中的依赖关系。
另一方面,当我使用 stats
中的基本 heatmap
函数并抑制树状图时
heatmap(same_data, Rowv = NA, Colv = NA)
计算执行时间是线性并且完全可以忽略不计。
下面是执行时间的对比
我用来生成上述图表数据的代码是
num.rows <- c(100, 500, 1000, 1500, 2000, 2500, 3000)
times.heatmap.2 <- sapply(num.rows, function(rown){
m <- matrix(rnorm(rown*50), rown, 50)
system.time(tmp <- gplots::heatmap.2(m, Rowv = FALSE, Colv = FALSE, dendrogram = "none", trace="none"))
})
times.heatmap <- sapply(num.rows, function(rown){
m <- matrix(rnorm(rown*50), rown, 50)
system.time(tmp <- heatmap(m, Rowv = NA, Colv = NA))
})
最后,问题。
- 有谁知道为什么
heatmap.2
有这么长的执行时间并且可能对数据大小有二次依赖,即使它应该忽略任何二次操作(例如聚类)? - 有没有我应该使用的参数,或者我们应该深入研究函数的源代码来诊断问题?
你可以试试这个:
install.packages("heatmap3")
num.rows <- c(100, 500, 1000, 1500, 2000, 2500, 3000)
times.heatmap.3 <- sapply(num.rows, function(rown){
m <- matrix(rnorm(rown*50), rown, 50)
system.time(tmp <- heatmap3(m, Rowv = FALSE, Colv = FALSE, dendrogram = "none", trace="none"))
})