Opération sur 1 objet de type array

Questions sur les objets de R et la manipulation des données

Modérateur : Groupe des modérateurs

Sébastien Hamel
Messages : 71
Enregistré le : 11 Mai 2006, 08:00

Opération sur 1 objet de type array

Messagepar Sébastien Hamel » 08 Aoû 2006, 15:04

1-J'ai un objet de type array nommé 'delta' par exemple de dimension:
nrow=27
ncol=6
et tout ca 10604 fois donc delta[27,6,10604] en gros.

Je souhaiterais faire de cet objet array une matrice nommée 'delta2'. Je m'explique:
à partir de 'delta', je souhaiterais prendre toutes les colonnes n°2, soit delta[i,2,k] pour chaque 10604 si je puis dire et construire une matrice de dimension:
nrow=tjs les 27 de bases
ncol=10604 donc j'aurais en qq sortes toutes les colonnes n°2 des 10604 fois!.
donc au final 'delta2' aura comme dimension [27,10604]

2- Ensuite à 'delta2' je souhaite additionner sur chaque colonne une matrice 'gamma' de dimension [27,1].
Donc en gros additionner ma colonne de 'gamma' à chaque colonne de 'delta2' pour former une nouvelle matrice 'delta3'

3- Et enfin, je souhaiterais savoir si il est possible "d'inverser" si je puis dire ma matrice 'delta3', à savoir:
'delta3' a pour dimension [27,10604] & je voudrais obtenir 'delta4' de dimension [10604,27]

Merci d'avance de votre aide précieuse

Vincent Andres
Messages : 13
Enregistré le : 17 Juil 2006, 09:27

Re: Opération sur 1 objet de type array

Messagepar Vincent Andres » 08 Aoû 2006, 15:29

Sébastien Hamel a écrit :1-Je souhaiterais faire de cet objet array une matrice

Un petit exemple plutôt qu'un long discours
a = array(1:24 , c(2,3,4)); # à voir comme une matrice 3D
b = a[1:2 , 2 , 1:4]; # pour en extraire une "coupe"

Sébastien Hamel a écrit :2- Ensuite à 'delta2' je souhaite additionner sur chaque colonne une matrice 'gamma' de dimension [27,1].
Donc en gros additionner ma colonne de 'gamma' à chaque colonne de 'delta2' pour former une nouvelle matrice 'delta3'

Pas sûr d'avoir bien compris là, mais :
Pour additionner 2 matrices, l'opérateur + suffit.
Pour créer une matrice dont toutes les colonnes sont identiques :
a = matrix(colonne, nbrows, nbcols) suffit.

Sébastien Hamel a écrit :3- Et enfin, je souhaiterais savoir si il est possible "d'inverser" si je puis dire ma matrice 'delta3', à savoir:
'delta3' a pour dimension [27,10604] & je voudrais obtenir 'delta4' de dimension [10604,27]


voir ?t (returns the transpose).

eça

Sébastien Hamel
Messages : 71
Enregistré le : 11 Mai 2006, 08:00

Re: Opération sur 1 objet de type array

Messagepar Sébastien Hamel » 08 Aoû 2006, 16:07

Ok, merci pour le point 1 & 3, j'ai compris, mais le point 2 je te réexplique:
je veux additionner sur toutes les colonnes de 'delta2', donc sur les 10604 colonnes, ma matrice 'gamma' qui a une dimension différente, à savoir que cette matrice est de dimension [27,1] à contrario de ma matrice 'delta2' [27,10604].

Donc comment additionner ma seule colonne de 'gamma' à toutes celles de 'delta2' pour obtenir en résultat une matrice de dimension égale à 'delta2'

Merci encore

Vincent Andres
Messages : 13
Enregistré le : 17 Juil 2006, 09:27

Re: Opération sur 1 objet de type array

Messagepar Vincent Andres » 08 Aoû 2006, 16:32

Sébastien Hamel a écrit :Ok, merci pour le point 1 & 3, j'ai compris, mais le point 2 je te réexplique:
je veux additionner sur toutes les colonnes de 'delta2', donc sur les 10604 colonnes, ma matrice 'gamma' qui a une dimension différente, à savoir que cette matrice est de dimension [27,1]


Il s'agit donc d'une colonne (?).
Je l'appelle la_colonne pour détailler.

Sébastien Hamel a écrit :Donc comment additionner ma seule colonne de 'gamma' à toutes celles de 'delta2' pour obtenir en résultat une matrice de dimension égale à 'delta2'


matrice_a_cols_identiques = matrix(la_colonne , nrow=27, ncol=10604);
matrice_resultat = delta2 + matrice_a_cols_identiques;

(Si j'ai encore mal compris, un petit exemple genre
a = matrix(1:6, nrow=2, ncol=3) + le résultat souhaité pourrait aider à aider.)

Sébastien Hamel
Messages : 71
Enregistré le : 11 Mai 2006, 08:00

Re: Opération sur 1 objet de type array

Messagepar Sébastien Hamel » 09 Aoû 2006, 06:13

Si tu veux ce quez je cherche à faire c'est cela: voici un ptit exemple:

additionner 2 matrices de tailles différentes:

Code : Tout sélectionner

b=matrix(1:8, 2, 4)
c=matrix(1:2, 2, 1)

d= b + c


mais en faisant cette opération R me dit

Code : Tout sélectionner

Erreur dans b + c : tableaux de tailles inadéquates


donc moi c'est la meme chose avec mon exemple:

Code : Tout sélectionner

delta2=matrix(delta1, 27, 10604) mais les 10604 colonnes ne sont pas identiques comme tu as pu le comprendre auparavant!!
gamma=matrix(x, 27, 1)
delta3=delta2+gamma

mais cette dernière opération n'est pas bonne d'après la réponse de R sur l'exemple simple plus haut....
Pourrais-tu m'aider si now c'est plus clair pour toi...
Désolé si je ne suis pas clair jusqu'à présent...
Merci

Sébastien Hamel
Messages : 71
Enregistré le : 11 Mai 2006, 08:00

Messagepar Sébastien Hamel » 09 Aoû 2006, 06:25

excuse moi, je crois que je viens de comprendre ton exemple.
Ton idée a toi est de dupliquer les colonnes de ma matrice gamma pour en avoir exactement le meme nombre que pour delta2 et ainsi pouvoir effectuer mon addition de matrice.
Cool


Retourner vers « Archives : Manipulation de données avec R »

Qui est en ligne

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