Есть ли у Кутхилла Макки проппер переупорядочение для R? - PullRequest
0 голосов
/ 05 февраля 2020

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

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

This is the matrix sparsity structure

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

Каждый имеет опыт работы с это?

1 Ответ

0 голосов
/ 05 февраля 2020

Функция должна быть доступна после установки и загрузки пакета 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])
}
...