Je dessine de manière répétée de grandes matrices avec des valeurs aléatoires à partir d'une simulation de Monte Carlo. Comme j'explore un large espace de paramètres, la simulation se déroulera très probablement sur plusieurs jours. J'essaie donc de trouver le moyen le plus efficace de gagner le plus de temps possible. Considérons le code suivant avec une matrice de 500x18 comme exemple.
U = matrix(sample.int(500, size = 500*18, replace = TRUE), nrow = 500, ncol = 18)
X = matrix(nrow= 500, ncol = 18)
Marginals = matrix(runif(500*18, min = 0, max = 1),500,18)
for (i in 1:18){
for (k in 1:500){
X[k,i] = Marginals[U[k,i],i]
}
}
Les valeurs tirées au hasard dans U servent d'indice de ligne, tandis que l'indice de colonne est fourni par la colonne de U respective.
Je sais que les boucles ne sont généralement pas le meilleur moyen de s'en sortir, mais existe-t-il un moyen plus efficace d'utiliser par ex. apply
ici ?
Par la suggestion de Yogos, le code le plus efficace peut se passer de la boucle k :
U = matrix(sample.int(500, size = 500*18, replace = TRUE), nrow = 500, ncol = 18)
X = matrix(nrow= 500, ncol = 18)
Marginals = matrix(runif(500*18, min = 0, max = 1),500,18)
for (i in 1:18){
X[, i] <- Marginals[U[, i], i]
}