0

我正在使用 R 中的以下代码进行离散小波变换。我的 data.table 格式的数据是以块的形式从配置单元表中获取并转换为矩阵,然后按如下方式应用小波变换。

library(parallel)
library(wavelets)

# Function to create discrete wavelet transform from data in matrix format
    createWt  <- function(d_matrix){

      wtScore <- NULL
      for (i in 1:nrow(d_matrix)){
        a <- d_matrix[i,]
        wt <- dwt(a, filter= "haar" , boundary = "periodic" )
        wtScore <- rbind(wtScore, unlist(c(wt@W,wt@V[[wt@level]])))
      }

      return(wtScore)
    }

# applying the function to a list of matrices parallely using mclapply
    wtScore <- parallel::mclapply(m_score, createWt, mc.cores = 28)

对于具有 32 个内核的 LINUX 机器上的 1000 万 x 52 列的数据集,离散小波变换大约需要 3 小时 30 分钟,如上所述,我使用 28 个内核进行处理。但是我必须在 30-35 百万行 X 52 列的数据集上执行此操作,并且运行 3000 万行的数据集大约需要 26 小时。 m_score上面是从 data.table 转换的分块矩阵列表。

关于在 R 中更快地做到这一点的任何想法

  • 寻找任何 R 或其他语言的专业库。
  • 由于数据来自蜂巢表,我也愿意使用 Hive UDF 进行变换,但找不到用于小波变换的 UDF。
4

0 回答 0