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

Signal Discussion :

Manipulation de Matrices - Fonction reshape [Débutant]


Sujet :

Signal

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 35
    Points : 16
    Points
    16
    Par défaut Manipulation de Matrices - Fonction reshape
    Bonsoir,

    J'ai une matrice 1x10 que je souhaite transformer en matrice 2x5. Pour cela j'utilise la fonction reshape mais Le problème c'est que l'ordre des données que j'obtiens ne me convient pas:

    Données initiales:
    1 2 3 4 5 6 7 8 9 10

    Données que j'obtiens avec la fonction reshape:
    1 3 5 7 9
    2 4 6 8 10

    Données que je souhaite obtenir:
    1 2 3 4 5
    6 7 8 9 10

    Merci d'avance pour votre aide.

    Domino5731

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Il te faut opérer une transposée en plus de reshape dans lesquels tu inverses les paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >>T = [1 2 3 4 5 6 7 8 9 10];
    >>reshape(T,2,5)
     
    ans =
     
         1     3     5     7     9
         2     4     6     8    10
     
    >>reshape(T,5,2).' 
     
    ans =
     
         1     2     3     4     5
         6     7     8     9    10

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Merci !

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    J'ai encore une question sur la fonction reshape: j'ai une matrice de la forme suivante 2x2x2 double:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    val(:,:,1) =
     
        3.9073    7.0560
        3.8111    6.8824
     
     
    val(:,:,2) =
     
        6.8784   12.4216
        6.8815   12.4271
    Je souhaite obtenir la matrice de la forme 1x8 suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    3.9073    7.0560    3.8111    6.8824   6.8784   12.4216   6.8815   12.4271
    Or, j'obtiens la matrice suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    3.9073   3.8111   6.8784   6.8815   7.0560   6.8824   12.4216   12.4271
    Après de nombreuses tentatives infructueuses, je m'adresse à vous.

    Merci pour vos réponses.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Il te faut opérer une permutation sur les dimensions 1 et 2 pour commencer.

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 35
    Points : 16
    Points
    16
    Par défaut Multiplication de matrices
    Toujours aussi efficace !

    A chaque fois que j'avance un peu, je me heurte à un nouveau "petit problème" qui m'empêche d'avancer !

    Voici mon nouveau problème:

    - j'ai une matrice 1x3 double G1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1,95251798651759	3,52599187053688	1,95251798651759
    - j'ai aussi une matrice 9x3 double G2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    2,38102926113102	3,23372241159315	1,46103659067400
    1,89280331656645	3,37466713748977	1,89280331656645
    1,46103659067400	3,23372241159315	2,38102926113102
    2,46669356004975	3,37466713748977	1,50122621667594
    1,95251798651759	3,52599187053688	1,95251798651759
    1,50122621667594	3,37466713748977	2,46669356004975
    2,38102926113102	3,23372241159315	1,46103659067400
    1,89280331656645	3,37466713748977	1,89280331656645
    1,46103659067400	3,23372241159315	2,38102926113102
    Je veux juste multiplier colonne par colonne les termes entre eux. C'est à dire:
    - la colonne 1 de G1 avec la colonne 1 de G2
    - la colonne 2 de G1 avec la colonne 2 de G2
    - la colonne 3 de G1 avec la colonne 3 de G2

    Et ainsi obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    4,649002459	11,40207893	2,852700222
    3,695732521	11,89904889	3,695732521
    2,852700222	11,40207893	4,649002459
    4,816263543	11,89904889	2,93117119
    3,812326488	12,43261867	3,812326488
    2,93117119	 11,89904889	4,816263543
    4,649002459	11,40207893	2,852700222
    3,695732521	11,89904889	3,695732521
    2,852700222	11,40207893	4,649002459

    Pour l'instant je suis capable d'obtenir la multiplication de toutes les colonnes entre elles:
    la 1 de G1 avec la 1 de G2
    la 1 de G1 avec la 2 de G2
    la 1 de G1 avec la 3 de G2

    la 2 de G1 avec la 1 de G2
    la 2 de G1 avec la 2 de G2
    la 2 de G1 avec la 3 de G2

    la 3 de G1 avec la 1 de G2
    la 3 de G1 avec la 2 de G2
    la 3 de G1 avec la 3 de G2

    Merci pour votre aide.

    Domino5731

  7. #7
    Invité
    Invité(e)
    Par défaut
    Deux fonctions à regarder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    doc bsxfun
    doc repmat

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Merci, j'ai réussi en utilisant la fonction bsxfun.

    A peine débloqué, déjà rebloqué !

    J'ai 2 matrices:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    a=3x3
     
    1 2 3
    4 5 6
    7 8 9
     
    b=3x3
     
    1 1 1
    1 1 1
    1 1 1
    Je souhaite multiplier chaque ligne de ma matrice a par la matrice b colonne par colonne et ainsi obtenir le résultat suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1 2 3
    1 2 3
    1 2 3 
     
    4 5 6
    4 5 6
    4 5 6
     
    7 8 9
    7 8 9
    7 8 9

    Autre question:

    j'ai cette matrice G:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    1,90334290013644	3,52285640172595	2,00113514433511
    2,00177053063495	3,52442356030870	1,90393107474002
    1,95251798651759	3,52599187053688	1,95251798651759
    1,90393107474002	3,52442356030870	2,00177053063495
    2,00113514433511	3,52285640172595	1,90334290013644
    1,95190655812473	3,52442356030870	1,95190655812473
    1,90334290013644	3,52285640172595	2,00113514433511
    2,00113514433511	3,52285640172595	1,90334290013644
    1,95190655812473	3,52442356030870	1,95190655812473
    1,90334290013644	3,52285640172595	2,00113514433511
    2,00177053063495	3,52442356030870	1,90393107474002
    1,95251798651759	3,52599187053688	1,95251798651759
    1,90393107474002	3,52442356030870	2,00177053063495
    2,00113514433511	3,52285640172595	1,90334290013644
    1,95190655812473	3,52442356030870	1,95190655812473
    1,90334290013644	3,52285640172595	2,00113514433511
    Je souhaite la transformer de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    val(:,:,1) =
     
    1,90334290013644	3,52285640172595	2,00113514433511
    2,00177053063495	3,52442356030870	1,90393107474002
    1,95251798651759	3,52599187053688	1,95251798651759
    1,90393107474002	3,52442356030870	2,00177053063495
    2,00113514433511	3,52285640172595	1,90334290013644
    1,95190655812473	3,52442356030870	1,95190655812473
    1,90334290013644	3,52285640172595	2,00113514433511
    2,00113514433511	3,52285640172595	1,90334290013644
    1,95190655812473	3,52442356030870	1,95190655812473
     
     
    val(:,:,2) =
     
    1,90334290013644	3,52285640172595	2,00113514433511
    2,00177053063495	3,52442356030870	1,90393107474002
    1,95251798651759	3,52599187053688	1,95251798651759
    1,90393107474002	3,52442356030870	2,00177053063495
    2,00113514433511	3,52285640172595	1,90334290013644
    1,95190655812473	3,52442356030870	1,95190655812473
    1,90334290013644	3,52285640172595	2,00113514433511
    2,00113514433511	3,52285640172595	1,90334290013644
    1,95190655812473	3,52442356030870	1,95190655812473
    Je souhaite donc simplement la séparer en 2.

    Or lorsque je fais: j'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    val(:,:,1) =
     
        2.0011    2.0011    3.5229
        1.9519    1.9519    3.5244
        1.9033    1.9033    3.5229
        2.0018    2.0018    3.5244
        1.9525    1.9525    3.5260
        1.9039    1.9039    3.5244
        2.0011    2.0011    3.5229
        1.9519    1.9519    3.5244
        1.9033    1.9033    3.5229
     
     
    val(:,:,2) =
     
        3.5229    1.9033    1.9033
        3.5244    1.9519    1.9519
        3.5229    2.0011    2.0011
        3.5244    1.9039    1.9039
        3.5260    1.9525    1.9525
        3.5244    2.0018    2.0018
        3.5229    1.9033    1.9033
        3.5244    1.9519    1.9519
        3.5229    2.0011    2.0011
    J'ai bien la bonne taille de matrice, mais les valeurs ne sont pas dans l'ordre que je souhaite.

    Merci pour votre aide.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Tu as l'air de bien t'amuser
    Alors le premier, on va regarder une nouvelle fonction, combinée avec repmat
    Le deuxième est très proche du tout premier : cela se règle à coup de transposée et reshape.

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Merci.

    On peut en effet considérer ça comme un amusement

    La fonction kron à l'air intéressante. Par contre je ne vois pas comment l'utiliser, même en ayant lu attentivement l'aide de Matlab.

    Pour ce qui est de mon 2ème problème, j'ai essayé et encore essayé à coup de transposé et de reshape. J'obtiens des résultats différents, mais jamais celui que je souhaite obtenir. Etant donné qu'avec la fonction reshape je ne sais pas exactement ce que Matlab fait, même si je trouve la réponse se sera un coup de chance.

    Bref, comme tu dis, je m'amuse bien.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Je te conseille de faire un petit tour sur le tutoriel Gestion des matrices ; notamment les paragraphes

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Merci, j'avais consulté ce tutoriel lorsque j'ai commencé à utiliser Matlab. En ayant un peu plus de notions, ça ne fait pas de mal de le relire. Notamment le passage sur le redimensionnement, fonction reshape où cette phrase:
    On remarque que les éléments sont réordonnés colonne par colonne, conformément à la manière dont MATLAB stocke les matrices.
    m'a aidé à comprendre le fonctionnement de la fonction reshape.

    J'ai donc réussi à résoudre mon 2ème problème du jour et par la même occasion le 1er . Par contre, je n'ai pas utiliser la fonction kron pour y parvenir et en lisant le tutoriel (réplication entrelacée) je ne vois vraiment pas comment elle peut m'aider pour faire ça:

    multiplier chaque ligne de ma matrice a par la matrice b colonne par colonne
    Encore merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. manipulation des matrices sous SSRS
    Par linram dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/07/2007, 12h31
  2. [Manipulation de matrices] Elements adjacents
    Par Opérateur dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 25/11/2006, 11h30
  3. Fonctions manipulant des matrices
    Par panda31 dans le forum C
    Réponses: 24
    Dernier message: 14/06/2006, 10h28
  4. Redimensionner une matrice avec "reshape"
    Par kmaniche dans le forum Images
    Réponses: 9
    Dernier message: 07/06/2006, 18h35
  5. Manipulation de matrices.
    Par TeKa dans le forum C
    Réponses: 28
    Dernier message: 16/11/2005, 15h53

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