Enregistrer plusieurs matrices dans un array

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Diane MANZON
Messages : 56
Enregistré le : 18 Juin 2018, 08:31

Enregistrer plusieurs matrices dans un array

Messagepar Diane MANZON » 19 Avr 2019, 14:00

Bonjour à tous,

Dans mon programme, je crée une matrice à chaque boucle for.
Je voudrais ensuite sauvegarder cette matrice dans un array.
Ainsi, à la fin de la boucle, j'aurais un nombre de tableaux (inconnu) stocké dans un array. Le nombre de lignes et le nombre de colonnes pour chaque matrice peut être différent…

Voici un exemple reproductible (très simple!) pour comprendre l'idée:

Code : Tout sélectionner

for (i in 1:5) {
  a <- matrix(rnorm(4), nrow=2, ncol=2) #cette matrice est différente à chaque boucle
  d <- array(a, c(nrow=nrow(a), ncol=2,i)) # le nombre de matrices doit être égal au nombre de dimensions du array et chaque matrice doit être différente ...
 
}



Quelqu'un aurait-il une idée ?
Merci pour votre aide !

Cordialement,

Diane MANZON

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Enregistrer plusieurs matrices dans un array

Messagepar Pierre-Yves Berrard » 19 Avr 2019, 14:06

Diane MANZON a écrit :Le nombre de lignes et le nombre de colonnes pour chaque matrice peut être différent…

Ça va poser un problème pour mettre cela dans un array.
Stocker plutôt les matrices dans une liste ?

edit : un exemple pour générer une liste de 5 matrices aux dimensions aléatoires :

Code : Tout sélectionner

random_matrix <- function() {
  nlignes <- rpois(1, 5)
  ncol <- rpois(1, 5)
  matrix(rnorm(nlignes * ncol), nlignes, ncol)
}
 
replicate(5, random_matrix())
PY

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Enregistrer plusieurs matrices dans un array

Messagepar Mickael Canouil » 19 Avr 2019, 16:10

Bonjour,

Diane MANZON a écrit :Ainsi, à la fin de la boucle, j'aurais un nombre de tableaux (inconnu) stocké dans un array.

Soit le pire cas d'utilisation d'une boucle "for".
L'utilisation d'une boucle "for" (pour être performante) nécessite des objets initialisés (ici "d") et rempli par la boucle à chaque itération.
Au passage, votre array d, contient i fois la matrice générée à l'itération i.
Soit à la sortie de boucle, d contient 5 fois la dernière matrice a.

Un array comme une matrice, ne peut pas avoir de dimension inconnue.
Donc, le type dont vous avez besoin est le type list comme suggéré par Pierre-yves.
Mickaël
mickael.canouil.fr | rlille.fr

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Enregistrer plusieurs matrices dans un array

Messagepar Logez Maxime » 23 Avr 2019, 07:17

Bonjour,

A mon avis le plus simple est que tu stockes tes matrices dans une liste. Que tu récupères dans la liste les dimensions de chacune des matrices. Ensuite tu cherches les plus grandes dimensions, nombre de lignes, nombre de colonnes. Ensuite tu crées un array de NA avec pour dimensions le maximum du nombre de lignes, le maximum du nombre de colonnes et le nombre d'éléments dans ta liste. Puis avec une boucle for tu remplis le NA, l'indexation servant pour se repérer dans la 3ème dimension. Il te faudra aussi jouer sur les indexations des deux premières dimensions en te servant de celles de chacune des matrices pour ne remplir que la partie du array qui correspond à chacune des matrices. Sinon tu risque de remplir plus qu'il ne faut en recyclant les valeurs comprises dans chacune des matrices et en perdant les na la ou c'est vide.

Cordialement,
Maxime


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité