Nested matrix (optimisation)
salut à tous,
je dois programmer une fonction qui, à partir d'une matrice de 0 et de 1 (absence/présence de parasites sur des hôtes), me renvoie la 'nested matrix' correspondante, autrement dit celle dans laquelle on a regroupé au maximum les associations similaires dans un coin de la matrice (en changeant uniquement l'ordre des lignes/colonnes).
En trois minutes parce que ce n'est pas une priorité, j'ai sorti le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| test.matrice <- round(runif(8*8,0,1),0)
test.matrice <- matrix(test.matrice,ncol=8)
nest = function(matrice,do.plot)
{
perm <- 1
while(perm != 0)
{
perm <- 0
for(i in 1:(nrow(matrice)-1))
{
temp.i <- matrice[i,]
temp.s <- matrice[(i+1),]
if(sum(temp.i)<sum(temp.s))
{
matrice[i,] <- temp.s
matrice[(i+1),] <- temp.i
perm <- perm + 1
}
}
}
perm <- 1
while(perm != 0)
{
perm <- 0
for(i in 1:(ncol(matrice)-1))
{
temp.i <- matrice[,i]
temp.s <- matrice[,(i+1)]
if(sum(temp.i)<sum(temp.s))
{
matrice[,i] <- temp.s
matrice[,(i+1)] <- temp.i
perm <- perm + 1
}
}
}
if(do.plot)
{
cols <- colorRampPalette(c("#FFFFFF", "#000000"))
image(matrice,col= cols(5))
}
return(matrice)
}
nest(test.matrice,do.plot=TRUE) |
Ma question est : suis-je sûr d'avoir la matrice qui correspond à mes critères
Par exemple :
Code:
1 2 3 4 5 6
|
0 0 1 1 1 1
0 0 0 1 1 1
0 0 0 1 1 1
0 0 0 0 1 1
0 0 0 0 0 1 |
Et enfin, est-il possible de gagner du temps de calcul, si je dois traiter des matrices assez importantes?