我正在將一個MATLAB腳本轉換爲R,並對此感到遺憾,因爲此刻它速度較慢。我試圖儘可能多地使用「矢量化函數」,但我對R相對比較陌生,不知道這是什麼意思。如果你使用大量的運算符(包括括號),那麼從我的循環研究來說,它只比R中的apply()方法慢。否則,我不會看到R可以做些什麼來進一步減慢它。這是我想要加速的代碼。等效於MATLAB的reshape()方法的最快R?
somPEs <- 9;
inputPEs <- 6;
initial_w <- matrix(1, nrow=somPEs, ncol=inputPEs)
w <- apply(initial_w, 1, function(i) runif(i));
# Reshape w to a 3D matrix of dimension: c(sqrt(somPEs), sqrt(somPEs), inputPEs)
nw <- array(0, dim=c(sqrt(somPEs), sqrt(somPEs), inputPEs))
for (i in 1:inputPEs) {
nw[,,i] <- matrix(w[i,], nrow=sqrt(somPEs), ncol=sqrt(somPEs), byrow=TRUE)
}
w <- nw;
在MATLAB中,該代碼是由被稱爲「重塑」一個內置的功能執行,如按以下步驟進行:
w = reshape(w,[sqrt(somPEs) sqrt(somPEs) inputPEs]);
我計時我的當前R代碼,它實際上是超快速,但我仍然想了解矢量化以及如何將我的代碼轉換爲apply()以提高可讀性。
user system elapsed
0.003 0.000 0.002