簡體   English   中英

將矩陣轉換為 data.table 的最快方法

[英]Fastest way to convert a matrix to a data.table

將如下矩陣轉換為 data.table 的最快方法是什么?

mat <- matrix(1:9, nrow = 3)

1 2 3
4 5 6
7 8 9

我可以使用以下代碼將其轉換為 data.table

setDT(data.frame(mat))[]

但這是最快的方法嗎? 我們可以在不先將其轉換為 data.frame 的情況下做到這一點嗎?

這里有一些例子來討論形成data.table的速度,即as.data.tablesetDT(as.data.frame(mat))setDT(data.frame(mat))

  • 當行小於列時:
mat <- matrix(1:5e3, nrow = 5)
microbenchmark(unit = "relative",
               as.data.table(mat),
               setDT(as.data.frame(mat))[],
               setDT(data.frame(mat))[])

Unit: relative
                        expr      min       lq     mean   median       uq      max neval
          as.data.table(mat) 1.433084 1.417747 1.340552 1.413278 1.414386 1.070289   100
 setDT(as.data.frame(mat))[] 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000   100
    setDT(data.frame(mat))[] 1.287526 1.281964 1.237544 1.284735 1.258662 1.186977   100
  • 當行多於列時:
mat <- matrix(1:5e3, nrow = 5e2)
microbenchmark(unit = "relative",
               as.data.table(mat),
               setDT(as.data.frame(mat))[],
               setDT(data.frame(mat))[])

Unit: relative
                        expr      min       lq     mean   median       uq      max neval
          as.data.table(mat) 1.114003 1.041410 1.083238 1.070029 1.049262 1.254732   100
 setDT(as.data.frame(mat))[] 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000   100
    setDT(data.frame(mat))[] 1.680208 1.467538 1.482018 1.511009 1.479438 1.440440   100

備注setDT(as.data.frame(mat))[]是速度的贏家

您可以使用magrittr pipe:

mat <- matrix(1:9, nrow = 3) %>% data.table()

沒有magrittr

mat <- data.table(matrix(1:9, nrow = 3)) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM