Скажем, у вас есть матрица 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 это и что я пропустил?