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

MATLAB Discussion :

Somme de matrices/tableaux de cellules [Débutant]


Sujet :

MATLAB

  1. #1
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Juin 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 76
    Points : 53
    Points
    53
    Par défaut Somme de matrices/tableaux de cellules
    Bonjour,


    A un moment dans ma fonction je récupère une centaine de tableaux de cellules dont le nom s'incrémente

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Matrix{compteur} = histo_fct(vecteur1,vecteur2);
    Et la fin de mon programme je veux les sommer cellule par cellule. Malheureusement pour moi je n'y arrive pas...

    J'ai essayer de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Matrix = cell2mat(Matrix); % pour transformer mon tableau en matrice
    Mais avec ce que j'ai compris, je récupère une seule matrice avec un nombre incalculable de colonne puisque qu'il concatenise tous mes tableaux.
    Etant donné que mes tableaux ont une longueur fixe (20 colonnes), je voulais faire la somme tous les 20 mais ça ne marche pas (il renvoie une seule ligne)

    Si quelqu'un veut bien m'aider!

    Merci!

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Les tableaux ont-ils tous les même dimensions ?

    Le nombre de tableaux et le nombre de lignes dans chaque tableau est-il connu d'avance ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Juin 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 76
    Points : 53
    Points
    53
    Par défaut
    alors oui les tableaux ont tous la même dimension parce que j'ai simplifié (par contre si vous avez une solution pour qu'on puisse faire la meme chose avec des tableaux où les nombres de lignes et de colonnes sont variables je prends )

    Et justement le nombre de lignes et de colonnes sont connu d'avance dans ce cas (mais pour l'autre non)

    Je viens d'essayer de faire une boucle for

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for d=1:compteur-1
        TotalMatrix = Matrix{d} + Matrix{d+1};
    end
    Par contre ça ne fonctionne que dans le cas ou les tableaux ont la même dimension...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Plutôt quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TotalMatrix = zeros(<taille initiale>);
    for d=1:compteur
        TotalMatrix = TotalMatrix + Matrix{d};
    end
    non ?
    Citation Envoyé par martineaston Voir le message
    Par contre ça ne fonctionne que dans le cas ou les tableaux ont la même dimension...
    C'est tout à fait normal, tu ne peux pas sommer des tableaux de taille différentes.
    Par exemple comment sommes-tu ces deux tableaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
         1     2
         3     4
     +
         1     2     3
         4     5     6
         7     8     9
    ?

  5. #5
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Juin 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 76
    Points : 53
    Points
    53
    Par défaut
    Oui merci c'est mieux

    Et bien je me disais que on pourait trouver la taille maxi de mes tableaux, et ensuite mettre des zéros dans les colonnes et les lignes qui manques, et enfin les sommer vu qu'ils ont la même dimension.

    Par contre la pour le coup, c'est juste mon imagination qui parle, je ne sais absolument pas si cela est possible^^

  6. #6
    Invité
    Invité(e)
    Par défaut
    Tout est possible avec MATLAB

    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Matrix = {ones(2) , ones(3) , ones(4) , ones(5)};
    compteur = numel(Matrix);
    sizes = cellfun(@size, Matrix, 'UniformOutput', false);
    maxSize = max( cell2mat(sizes(:)) , [] , 1 );
     
    TotalMatrix = zeros(maxSize);
    for d = 1:compteur
        size_d = size(Matrix{d});
        if isequal(maxSize, size_d)
            TotalMatrix = TotalMatrix + Matrix{d};
        else
            TotalMatrix(1:size_d(1), 1:size_d(2)) = TotalMatrix(1:size_d(1), 1:size_d(2)) + Matrix{d};
        end
    end
    Ou en rajoutant justement les zéros dans Matrix :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    TotalMatrix = zeros(maxSize);
    for d = 1:compteur
        size_d = size(Matrix{d});
        if ~isequal(maxSize, size_d)
            Matrix{d}(maxSize(1), maxSize(2)) = 0;
        end
        TotalMatrix = TotalMatrix + Matrix{d};
    end

  7. #7
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Juin 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 76
    Points : 53
    Points
    53
    Par défaut
    Incroyable^^

    Merci!
    bonne soirée

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/02/2008, 13h46
  2. [Tableaux] si cellule vide, alors cellule inexistante
    Par afrodje dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 31/07/2007, 13h21
  3. Somme dépendant de plage de cellules variable
    Par Talieth dans le forum Excel
    Réponses: 4
    Dernier message: 23/04/2007, 10h37
  4. [Tableaux] Taille cellule de tableau
    Par johnkro dans le forum Langage
    Réponses: 4
    Dernier message: 27/07/2006, 08h48
  5. Matrices - Tableaux à 2 dimensions
    Par melotron dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 09/07/2006, 13h17

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