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 :

Répétition de matrices [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 Répétition de matrices
    Bonjour,

    J'ai une matrice de la forme 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
    val(:,:,1,1) =
     
        1    2   3
        1    2   3
        1    2   3
     
     
    val(:,:,2,1) =
     
        4    5   6
        4    5   6
        4    5   6
     
     
    val(:,:,3,1) =
     
        7    8   9
        7    8   9
        7    8   9
    Je souhaite pouvoir la répéter 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    val(:,:,1,1) =
     
        1    2   3
        1    2   3
        1    2   3
     
     
    val(:,:,2,1) =
     
        4    5   6
        4    5   6
        4    5   6
     
     
    val(:,:,3,1) =
     
        7    8   9
        7    8   9
        7    8   9
     
    val(:,:,1,2) =
     
        1    2   3
        1    2   3
        1    2   3
     
     
    val(:,:,2,2) =
     
        4    5   6
        4    5   6
        4    5   6
     
     
    val(:,:,3,2) =
     
        7    8   9
        7    8   9
        7    8   9
     
     
    val(:,:,1,3) =
     
        1    2   3
        1    2   3
        1    2   3
     
     
    val(:,:,2,3) =
     
        4    5   6
        4    5   6
        4    5   6
     
     
    val(:,:,3,3) =
     
        7    8   9
        7    8   9
        7    8   9
    J'ai beau avoir chercher et fait plusieurs tentatives, je n'y parviens pas.

    Merci pour votre aide.

    Domino5731

  2. #2
    Invité
    Invité(e)

  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.

    Avec repmat je ne parviens pas à obtenir ce que je veux.
    J'obtiens:

    1)
    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
    val(:,:,1,1) =
     
        1    2   3   1   2   3
        1    2   3   1   2   3
        1    2   3   1   2   3
     
     
    val(:,:,2,1) =
     
        4    5   6    4   5   6 
        4    5   6    4   5   6
        4    5   6    4   5   6
     
     
    val(:,:,3,1) =
     
        7    8   9   7   8   9
        7    8   9   7   8   9
        7    8   9   7   8   9
    2)
    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
    26
    27
    val(:,:,1,1) =
     
        1    2   3  
        1    2   3  
        1    2   3  
        1    2   3  
        1    2   3  
        1    2   3
     
     
    val(:,:,2,1) =
     
        4    5   6    
        4    5   6   
        4    5   6   
        4    5   6    
        4    5   6   
        4    5   6 
     
    val(:,:,3,1) =
     
        7    8   9  
        7    8   9  
        7    8   9  
        7    8   9  
        7    8   9  
        7    8   9

    Voici un extrait de mon code avec une tentative de répétition de matrice.

    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
    26
    27
    28
    29
    30
     
    %%Variables
     
    a=0.03;
    b=0.01;
     
    xc=linspace(0.5,0.8,2);
    yc=1/2;
    zc=1/2;
    f=(1:2:21);
     
     
    %%Boucle
     
     
    for i=1:3  
        for j= 1:3
            for k= 1:3
                for w=1:2
                    for ww=1:2
                         x (i,j,k,w)=xc(w)+(a/2)-((f(i)*b)/2);
                         y (i,j,k)=yc-(a/2)+((f(j)*b)/2);
                         z (i,j,k)=zc-(a/2)+((f(k)*b)/2);
                         y (i,j,k,ww)=yc-(a/2)+((f(j)*b)/2); %Cette ligne est utilisée pour répéter ma matrice y
                         z (i,j,k,ww)=zc-(a/2)+((f(k)*b)/2); %Cette ligne est utilisée pour répéter ma matrice z
                    end  
                end
            end
        end
    end
    En essayant de répéter ma matrice de cette façon, je n'obtiens pas tout à fait le résultat escompté et je ne comprends pas vraiment pourquoi.

    Résultat obtenu pour la matrice z:


    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    (:,:,1,1) =
    
        0.4900    0.4900    0.4900
        0.4900    0.4900    0.4900
        0.4900    0.4900    0.4900
    
    
    val(:,:,2,1) =
    
        0.5000    0.5000    0.5000
        0.5000    0.5000    0.5000
        0.5000    0.5000    0.5000
    
    
    val(:,:,3,1) =
    
        0.5100    0.5100    0.5100
        0.5100    0.5100    0.5100
        0.5100    0.5100    0.5100
    
    
    val(:,:,1,2) =
    
        0.5100    0.4900    0.4900  Je ne comprends pas pourquoi j'ai 0.5100 au lieu de 0.4900
        0.4900    0.4900    0.4900
        0.4900    0.4900    0.4900
    
    
    val(:,:,2,2) =
    
        0.5000    0.5000    0.5000
        0.5000    0.5000    0.5000
        0.5000    0.5000    0.5000
    
    
    val(:,:,3,2) =
    
        0.5100    0.5100    0.5100
        0.5100    0.5100    0.5100
        0.5100    0.5100    0.5100
    Merci pour votre aide.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Pour repmat, pense simplement à la dimension sur laquelle tu souhaites effectuer la répétition.

    Pour ce qui est de ta grande boucle (qui peut être largement simplifiée ), je ne comprends pas pourquoi tu as deux lignes pour y et z
    • y (i,j,k) et y (i,j,k,ww)
    • z (i,j,k) et z (i,j,k,ww)

    Toujours est-il que z (i,j,k) est équivalent à z (i,j,k,1) et c'est ce qui te pose problème.

  5. #5
    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
    Je dois t'avouer que, pour l'instant, je fais du bricolage avec Matlab et ça apparait avec ma "grande boucle".

    Je ne dois pas être tout à fait logique pour avoir ajouter deux lignes y et z.

    Lorsque je les supprime et que je procède de cette façon:
    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
    %%Variables
     
    a=0.03;
    b=0.01;
     
    xc=linspace(0.5,0.8,2);
    yc=1/2;
    zc=1/2;
    f=(1:2:21);
     
     
    %%Boucle
     
     
    for i=1:3  
        for j= 1:3
            for k= 1:3
                for w=1:2
                         x (i,j,k,w)=xc(w)+(a/2)-((f(i)*b)/2);
                         y (i,j,k,w)=yc-(a/2)+((f(j)*b)/2);
                         z (i,j,k,w)=zc-(a/2)+((f(k)*b)/2);        
                end
            end
        end
    end
    Il apparait que ça corrige mon problème et que de cette façon j'obtiens ce que je souhaite:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    (:,:,1,1) =
     
        0.4900    0.4900    0.4900
        0.4900    0.4900    0.4900
        0.4900    0.4900    0.4900
     
     
    val(:,:,2,1) =
     
        0.5000    0.5000    0.5000
        0.5000    0.5000    0.5000
        0.5000    0.5000    0.5000
     
     
    val(:,:,3,1) =
     
        0.5100    0.5100    0.5100
        0.5100    0.5100    0.5100
        0.5100    0.5100    0.5100
     
     
    val(:,:,1,2) =
     
        0.4900    0.4900    0.4900  
        0.4900    0.4900    0.4900
        0.4900    0.4900    0.4900
     
     
    val(:,:,2,2) =
     
        0.5000    0.5000    0.5000
        0.5000    0.5000    0.5000
        0.5000    0.5000    0.5000
     
     
    val(:,:,3,2) =
     
        0.5100    0.5100    0.5100
        0.5100    0.5100    0.5100
        0.5100    0.5100    0.5100
    Merci !

  6. #6
    Invité
    Invité(e)
    Par défaut

    Pour t'expliquer, dans ton exemple, tu possèdes un tableau 3x3x3x1 et souhaiterais opérer la répétition sur la quatrième dimension pour obtenir un tableau 3x3x3x3. Il vient donc naturellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    val = reshape(1:9,3,3);
    val = kron(val,ones(3,1,1));
    val = reshape(val,[3 3 3]);
    repmat(val,[1 1 1 3])

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

Discussions similaires

  1. Répétition de nombres dans une matrice
    Par maggie2008 dans le forum MATLAB
    Réponses: 2
    Dernier message: 04/05/2012, 15h46
  2. nombre de répétition dans matrice
    Par automa dans le forum MATLAB
    Réponses: 4
    Dernier message: 21/05/2010, 12h14
  3. répétition dans une matrice
    Par automa dans le forum Images
    Réponses: 13
    Dernier message: 25/03/2010, 07h48
  4. Réponses: 16
    Dernier message: 17/11/2008, 13h46
  5. Comment définir le type matrice ?
    Par charly dans le forum Langage
    Réponses: 7
    Dernier message: 15/06/2002, 21h01

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