Matrice avec des coefficients spéciales

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

Zayd Hajjej
Messages : 11
Enregistré le : 02 Mar 2020, 07:32

Matrice avec des coefficients spéciales

Messagepar Zayd Hajjej » 16 Avr 2020, 15:01

Bonjour,

Je voudrais savoir comment créer une matrice A avec des coefficients par exemple égaux à

A[i, j]= " i M j" pour tout 1<=i,j<=n. Par exemple, les résultats des

A[1,1], A[1,3] et A[6, 2]
sont
A[1,1]="1M1", A[1,3]="1M3" et A[6,2]="6M2".

Merci beaucoup d'avance.

Fred Santos
Messages : 233
Enregistré le : 11 Avr 2009, 10:00
Contact :

Re: Matrice avec des coefficients spéciales

Messagepar Fred Santos » 16 Avr 2020, 15:11

Bonjour,
C'est-à-dire (pour être sûr de bien comprendre), juste créer une matrice de chaînes de caractères "iMj" ?

Zayd Hajjej
Messages : 11
Enregistré le : 02 Mar 2020, 07:32

Re: Matrice avec des coefficients spéciales

Messagepar Zayd Hajjej » 16 Avr 2020, 15:15

Oui, avec i et j varient suivant l'élément A[i, j], c'est à dire par exemple A[1,5]="1M5", A[3,1]="3M1", etc...

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

Re: Matrice avec des coefficients spéciales

Messagepar Logez Maxime » 16 Avr 2020, 15:38

Bonjour,

une possibilité :

Code : Tout sélectionner

i <- 4
j <- 5
outer(1:i, 1:j, function(x, y) sprintf("%d M %d", x, y))
Cordialement,
Maxime

Fred Santos
Messages : 233
Enregistré le : 11 Avr 2009, 10:00
Contact :

Re: Matrice avec des coefficients spéciales

Messagepar Fred Santos » 16 Avr 2020, 15:43

Oh, très astucieux, Maxime !

Une autre solution, clairement moins élégante (et moins lisible) :

Code : Tout sélectionner

## Définir les constantes :
<- 4 # nombre de lignes
<- 5 # nombre de colonnes

## Bâtir la matrice :
<- paste0(rep(1:n, times = p),
            "M",
            rep(1:p, each = n))
<- matrix(x, ncol = p, nrow = n)
print(
A)

Zayd Hajjej
Messages : 11
Enregistré le : 02 Mar 2020, 07:32

Re: Matrice avec des coefficients spéciales

Messagepar Zayd Hajjej » 16 Avr 2020, 15:52

Merci beaucoup pour vos réponses. Excellent

Zayd Hajjej
Messages : 11
Enregistré le : 02 Mar 2020, 07:32

Re: Matrice avec des coefficients spéciales

Messagepar Zayd Hajjej » 16 Avr 2020, 18:57

Bonsoir,

Si j'ajoute des conditions dans la définition dans ma matrice A: Par exemple:

si i=j, alors A[i,j]="iMj",

sinon si i>j, alors A[i,j]="iNj"

sinon A[i,j]="iPj"

Comment peux-je la définir?

Merci d'avance.

Zayd Hajjej
Messages : 11
Enregistré le : 02 Mar 2020, 07:32

Re: Matrice avec des coefficients spéciales

Messagepar Zayd Hajjej » 17 Avr 2020, 06:18

Bonjour,
Je pense que la commande paste donne le résultat.

Code : Tout sélectionner

A<-matrix(rep(0,n*n),n,n)
for (i in 1:n){
for (j in 1:n){
if(i==j)
A[i,j]<-paste(i,j,sep="M")
else if (i>j)
A[i,j]<-paste(i,j,sep="N")
else
A[i,j]<-paste(i,j,sep="P")
}
}


Que pensez vous?

Fred Santos
Messages : 233
Enregistré le : 11 Avr 2009, 10:00
Contact :

Re: Matrice avec des coefficients spéciales

Messagepar Fred Santos » 17 Avr 2020, 06:22

Exactement. Dans ce genre de cas (où le temps d'exécution n'est pas un souci), j'aurais opté pour ça aussi. C'est une solution "universelle", absolument pas idiomatique pour le langage R (où la coutume est d'éviter les boucles for), mais ça fait le job.

Zayd Hajjej
Messages : 11
Enregistré le : 02 Mar 2020, 07:32

Re: Matrice avec des coefficients spéciales

Messagepar Zayd Hajjej » 17 Avr 2020, 06:42

@ Fred: Merci beaucoup pour votre réponse.

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

Re: Matrice avec des coefficients spéciales

Messagepar Logez Maxime » 17 Avr 2020, 10:12

Bonjour,

Dans un cas comme celui-là on peut aussi vectoriser les comparaisons en faisant quelque chose comme :

Code : Tout sélectionner

tab <- expand.grid(i=1:n, j=1:n)
tab$M <- "M"
tab$M[tab$i>tab$j] <- "N"
tab$M[tab$i<tab$j] <- "P"

res <- do.call(paste0, tab[c(1,3,2)])
mat <- matrix(character(), n , n)
mat[as.matrix(tab[,1:2])] <- res
Après dans un cas celui là les deux boucles ne posent aucun soucis et te permettent de faire ce que tu veux donc c'est nickel.
Par contre je ne partage pas le ressentiment sur les boucles qui est souvent véhiculés à tort, ou véhiculer parce que les boucles ne sont pas utilisées efficacement. Ce qui ne va pas c'est d'en imbriquer pas mal (comme ici mais une boucle for seule si bien codée est peut-être très efficace, voir meme plus que d'autres commandes.

Cordialement,
Maxime

Fred Santos
Messages : 233
Enregistré le : 11 Avr 2009, 10:00
Contact :

Re: Matrice avec des coefficients spéciales

Messagepar Fred Santos » 17 Avr 2020, 10:33

Par contre je ne partage pas le ressentiment sur les boucles qui est souvent véhiculés à tort, ou véhiculer parce que les boucles ne sont pas utilisées efficacement. Ce qui ne va pas c'est d'en imbriquer pas mal (comme ici mais une boucle for seule si bien codée est peut-être très efficace, voir meme plus que d'autres commandes.

Absolument d'accord avec ça ! (J'entends souvent des « quand on code en R, on ne fait pas de boucles for », ce qui me semble être un chouia rigide si on prend ça comme une généralité absolue.)
Le bon week-end !


Retourner vers « Questions en cours »

Qui est en ligne

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

cron