Есть ли способ переупорядочивания Cuthill Mckee для R?

У меня есть лагранжева матрица со следующими разреженными структурами:

Это матричная разреженная структура

Это структура разреженности матрицы

Я хочу использовать порядок Cuthill Mckee, но я не могу понять, как использовать его в R. Я нашел 2 возможных алгоритма:

У кого-нибудь есть опыт в этом?


person Britta    schedule 05.02.2020    source источник


Ответы (1)


Функция должна быть доступна после установки и загрузки пакета netprioR. Однако похоже, что он не экспортируется, поэтому вам придется называть его как netprioR:::cuthill_mckee(x).

Из исходного кода этого пакета:

#' Cuthill McKee (CM) algorithm
#' 
#' Transform sparse matrix into a band matrix
#' 
#' @author Fabian Schmich
#' @import Matrix
#' @param x Input matrix
#' @return Band matrix
cuthill_mckee <- function(x) {
  degs <- data.frame(Idx=1:ncol(x), NonZero=apply(x, 1, function(x) length(which(x != 0))))
  R <- degs$Idx[which.min(degs$NonZero)]
  i <- 1
  for (i in 1:ncol(x)) {
    Ai <- setdiff(which(x[R[i],] != 0), R)
    if (length(Ai) > 0) {
      Ai <- Ai[order(degs$NonZero[Ai], decreasing = FALSE)]
      R <- append(R, Ai)
    } else {
      R <- append(R, degs$Idx[-R][which.min(degs$NonZero[-R])])
    }
    i <- i + 1
  }
  rR <- rev(R)
  return(x[rR, rR])
}
person user12728748    schedule 05.02.2020
comment
Кажется, я не могу установить пакет netprioR. когда я ввожу install.packages ('netprioR'), он возвращает предупреждение в install.packages: пакет netprioR недоступен (для R версии 3.6.2) - person Britta; 06.02.2020
comment
netprioR находится на Bioconductor (bioconductor.org/packages/release/bioc/html/netprioR .html), поэтому попробуйте установить с BiocManager::install("netprioR"). - person user12728748; 06.02.2020