IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Conditions sur plusieurs matrices


Sujet :

R

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Conditions sur plusieurs matrices
    Bonjour,

    J'ai 13000 individus qui ont plusieurs variables, notamment x et y, qui sont des chaînes de caractères. J'ai donc un vecteur x de taille 13000 et un vecteur y de taille 13000, qui mesurent ces variables pour chaque individu. (x[i] et y[i] donnent les valeurs des variables de l'individu i)
    A partir du vecteur x, j'ai construit une matrice matx de dimension 13000x13000 telle que le coefficient en position (i,j) = 1 si x[i]==x[j] et 0 sinon.
    Pareil pour le vecteur y, j'ai construit une matrice maty de dimension 13000x13000 telle que le coefficient en position (i,j) = 1 si y[i]==y[j] et 0 sinon.
    Ces deux matrices sont des matrices creuses.


    Ces matrices sont symétriques, j'ai donc appliqué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    matx[!upper.tri(matx)] <- 0
    maty[!upper.tri(maty)] <- 0
    J'aimerais maintenant savoir combien il y a de couples (i,j) tels que : matx[i,j]==maty[i,j] & matx[i,j]==1
    En d'autres termes, je voudrais savoir le nombre de couples (i,j) possibles tels que la chaîne de caractère de i, et celle de j, soient les mêmes pour la variable x ET pour la variable y.

    J'ai essayé de calculer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    length(which(matx==maty & matx==1))
    Mais ce calcul prend beaucoup trop de temps.

    J'ai également essayé d'utiliser le produit matriciel, mais j'ai beaucoup de mal à comprendre le sens des résultats.

    Je ne sais pas si je devrais faire matx%*%maty puis calculer la somme ? Ou bien matx%*%t(maty) et faire la somme ?

    En espérant avoir été clair, merci d'avance !

  2. #2
    Membre averti
    Homme Profil pro
    Data scientist
    Inscrit en
    Février 2017
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data scientist
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 211
    Points : 343
    Points
    343
    Par défaut
    Bonjour,

    Je pense que cela peut répondre à ta question :

    Ca prends 1s pour cette matrice de 10 000 x 10 000

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    matx = matrix( nrow = 10000 , ncol = 10000 , rep(1,10000*10000))
     
    maty  =  matrix( nrow = 10000, ncol = 10000 , rep(1,10000*10000))
     
    sum( (matx== 1 ) == maty )

  3. #3
    Membre averti
    Homme Profil pro
    Data scientist
    Inscrit en
    Février 2017
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data scientist
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 211
    Points : 343
    Points
    343
    Par défaut
    Bonjour,

    On va faire en plus simple avec une matrice 2x2

    A [ 1 1 ]
    [1 1 ]

    et
    B [ 1 1 ]
    [1 1 ]

    le nombre de couples i,j qui sont égalent à 1 c'est 4 et non pas 2 ( sauf si je me trompe ? )

    car A[1,1] = B[1,1] = 1 ( ca fait +1 )

    A[1,2] = B[1,2] = 1 ( ca fait +1 ) ( donc 2 )

    A[2,1] = B[2,1] = 1 ( ca fait +1 ) ( donc 3 )

    A[2,2] = B[2,2] = 1 ( ca fait +1 ) ( donc 4 )

    c'est pareil pour l'ancien exemple.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    matx = matrix( nrow = 2, ncol = 2, rep(1,2*2))
     
    maty  = matrix( nrow = 2, ncol = 2, rep(1,2*2))
     
    sum( (matx== 1 ) == maty )

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Il semble que votre code ait un problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mat1 <- Matrix(c(1,0,0,1,0,0,1,0,0),nrow=3,ncol=3)
    mat2 <- Matrix(c(1,0,0,1,1,0,0,0,0),nrow=3,ncol=3)
    sum((mat1==1)==mat2)
    Le résultat attendu ici n'est pas 7 mais 2. Pourriez-vous m'éclairer ?

  5. #5
    Membre averti
    Homme Profil pro
    Data scientist
    Inscrit en
    Février 2017
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data scientist
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 211
    Points : 343
    Points
    343
    Par défaut
    Bonjour, effectivement ma première formule est fausse .

    normalement cela répondra à ta question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
      mat1 <- matrix(c(1,0,0,1,0,0,1,0,0),nrow=3,ncol=3)
      mat2 <- matrix(c(1,0,0,1,1,0,0,0,0),nrow=3,ncol=3)
      sum((mat1==mat2) & mat1 == 1)

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/04/2008, 10h52
  2. Condition sur plusieurs critères
    Par pierrot67 dans le forum Débuter
    Réponses: 2
    Dernier message: 09/09/2007, 10h09
  3. Test d'une condition sur plusieurs lignes
    Par pichto dans le forum Langage SQL
    Réponses: 9
    Dernier message: 23/05/2007, 09h19
  4. requête condition sur plusieurs champs
    Par grinder59 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 23/02/2007, 13h52
  5. Jointure avec conditions sur plusieurs colonnes
    Par ben53 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 28/11/2005, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo