Уменьшение времени вычисления движущегося ядра в R - PullRequest
1 голос
/ 25 марта 2020

Скажем, у вас есть матрица M , содержащая простые числа.

# For the sake of simplicity
# I will not use primes for the example 

M <- matrix(runif(100,0,1), ncol = 10, nrow = 10)

Моя цель - вычислить простое произведение меньшего ядра (скажем, 3 на 3) в каждой позиции матрицы М без учета ребер. В настоящее время у меня есть следующее:

prime_barcode <- function(prime.matrix){
    # Starting positions
    # not using edges as kernel center
    x_idx <- c(2,ncol(prime.matrix)-1)
    y_idx <- c(2,nrow(prime.matrix)-1)

    # Creating 0 vector for replacement 
    prime_barcode <- rep(0,(ncol(prime.matrix)-2)*(nrow(prime.matrix)-2))
    prime_loc <- 1

    # Looping over every column and row - excluding edges
    for(i in seq(x_idx[1],x_idx[2])){
        for(j in seq(y_idx[1],y_idx[2])){
            tmp <- as.vector(prime.matrix[i-1:i+1,j-1:j+1])
            prime_barcode[prime_loc] <- prod(tmp)
            prime_loc <- prime_loc +1
        }
    }
    return(prime_barcode)
}

В больших матрицах это выглядит довольно медленно.

Есть ли способ уменьшить время вычислений или есть функции R, которые могут свершившийся sh это и что я пропустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...