R/tEIGdht.R

tEIGdht <- function (tnsr)
  {
    if (tnsr@num_modes != 3)
      stop("T-SVD only implemented for 3d so far")
    modes <- tnsr@modes
    n1 <- modes[1]
    n2 <- modes[2]
    n3 <- modes[3]
    dhtz <- aperm(apply(tnsr@data, MARGIN = 1:2, fht), c(2,3,1))
    P_arr <- array(0, dim = c(n1, n2, n3))
    D_arr <- array(0, dim = c(n1, n2, n3))
    for (j in 1:n3) {
      decomp <- eigen(dhtz[, , j])
      decompp <- polar(decomp$vectors,decomp$values)
      P_arr[, , j] <- decompp$P
      D_arr[, , j] <- decompp$D
    }
    P <- as.tensor(aperm(apply(P_arr, MARGIN = 1:2,ifht), c(2,3,1)))
    D <- as.tensor(aperm(apply(D_arr, MARGIN = 1:2,ifht), c(2,3,1)))
    invisible(list(P = P, D = D))
  }

Try the rTensor2 package in your browser

Any scripts or data that you put into this service are public.

rTensor2 documentation built on Aug. 14, 2022, 9:05 a.m.