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 :

séparation lignes d'une matrice de taille variante


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut séparation lignes d'une matrice de taille variante
    Bonjour,

    je suis nouvelle dans ce forum et à la suite de recherche à travers tout le site, j'ai donc du ouvrir un nouveau sujet.

    Voici donc mon problème.
    J'ai un tableau dont le nombre de lignes et de colonnes varient selon les données d'entrée et lors de la simulation que je veux lancer. Apres la simulation , je me retrouve avec une matrice de type (simplifié) :

    A = [6 4 2.5 0 0
    1 3 2 8 6
    9 7 0 4 0]
    (par exemple, ici, on a généré une matrice 3x 5)

    je souhaite par la suite que pour chaque ligne ne contienne aucun '0' après une valeur non nulle. Cependant, comme la matrice ne peut avoir de valeurs vides, il faut donc les séparer ligne par ligne pour pouvoir effectuer cette opération
    (avoir a la fin, à titre indicatif:
    A = [6 4 2.5 0 0
    1 3 2 8 6
    9 7 0 4 0] )

    c'est ici que vient mon problème: Comme la valeur des lignes changent à chaque relance du programme, comment puis-je générer automatiquement des appellations de chacune de ces lignes?

    (c'est - à -dire dans ce cas la, avoir :
    ligne1=A(1,: );
    ...
    ligneN=A(N,: ); )

    Merci d'avance

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

    Citation Envoyé par miniclems Voir le message
    à la suite de recherche à travers tout le site
    Ou presque
    >> Comment créer des variables nommées A1, A2, A3, ..., AN ?

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    merci pour le lien, je ne connaissais pas la fonction de création de tableau de cellule et cela m'a bien aidée pour la résolution de mon problème.

    Cependant, voila que j'en ai un tout nouveau ,
    j'ai donc séparé mon tableau en tableau de cellules dont chaque ligne de la cellule est la ligne du tableau avec la taille finale :
    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
    A = [6 4 2.5 0 0 
    1 3 2 8 6
    9 7 0 4 0]
     
    A =
     
        6.0000    4.0000    2.5000         0         0
        1.0000    3.0000    2.0000    8.0000    6.0000
        9.0000    7.0000         0    4.0000         0
     
    for i = 1: nb_lignes                 
        A1{i,1} = A(i,:)
     
        % on retire les "0" 
        for j = size (A1{i,1},2):-1:1
            if (A1{i,1}(1,j)==0)
                A1{i,1}(:,j) = []
            end
        end
    end
     
    A2 = 
     
        [1x3 double]
        [1x5 double]
        [1x3 double]
    Maintenant, je souhaiterai concaténer ces 3 lignes de cellules en une seule. J'ai tenté de faire comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    B{1} = [A2 {1,1}(1,:) : A2{nb_lignes,1} (1, :)]
    et ceci me donne B comme cellule contenant le premiers termes de chacune des ligne
    je pourrai très bien faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    B{1} = [A2 {1,1}(1,:)  A2{2,1} (1, :) A2{3,1} (1, :)
    Mais comme le nombre de lignes varie constamment (entrée de la donnée par "input" ) je ne peux pas le faire.

    Pouvez vous m'aider pour que je puisse réaliser cette opération de concaténation de ces cellules?

    Merci d'avance

  4. #4
    Invité
    Invité(e)
    Par défaut
    Pour info, ton code peut se simplifier en:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [m n] = size(A);
    A1 = mat2cell(A,ones(m,1),n);
    A1 = cellfun(@(x) x(x~=0),A2,'UniformOutput',false)
    Si j'ai bien compris ce que tu voulais faire, pourquoi ne pas procéder par colonne A1{i,1} = A(:,i) et non par ligne?

Discussions similaires

  1. Comparaison de toutes les lignes d'une matrice
    Par hidies dans le forum MATLAB
    Réponses: 10
    Dernier message: 16/05/2007, 11h11
  2. Récupérer une ligne d'une matrice
    Par setsuko974 dans le forum Langage
    Réponses: 4
    Dernier message: 13/03/2007, 20h31
  3. Réponses: 2
    Dernier message: 08/03/2007, 11h06
  4. Stockage de lignes dans une matrice
    Par S4sha dans le forum MATLAB
    Réponses: 3
    Dernier message: 11/06/2006, 14h03
  5. Tracer une ligne dans une matrice
    Par S4sha dans le forum MATLAB
    Réponses: 4
    Dernier message: 30/05/2006, 15h10

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