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 :

Produit matrice cellule


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 11
    Points
    11
    Par défaut Produit matrice cellule
    Bonjour, ne sachant pas trop quoi taper pour chercher la réponse à ma question je poste un nouveau sujet

    Pour éviter une boucle for, je me demande s'il est possible de remplir des cellules par la multiplication d'une matrice par des nombres:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    b=cell(4,1);
    a=[1 2 3];
    b{1:4}=a*{1:4}
    ??? Undefined function or method 'mtimes' for input arguments of type 'cell'.
    Cette syntaxe ne fonctionne pas par exemple
    Je souhaiterai arriver à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    b{1}=a*1;b{2}=a*2;b{3}=a*3;b{4}=a*4
     
    b = 
     
        [1x3 double]
        [1x3 double]
        [1x3 double]
        [1x3 double]
    Sauriez-vous comment faire si c'est possible?
    Merci!

    NB: a est en réalité une matrice 3D

  2. #2
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b =cellfun(@(x) a*x,mat2cell((1:4).',ones(1,4)),'UniformOutput',false)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Excellent, merci!

    Résolu

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Après avoir implémenté l'astuce dans mon calcul, je suis passé d'un temps de calcul de 8s avec la boucle for à 7.2s avec cellfun, je m'attendais à bien mieux

    Si je double la longueur de ma boucle for je passe à 16s et 14.4s pour cellfun

    Théoriquement avec Matlab et le calcul matriciel on pourrait avoir un temps de calcul qui ne dépend que très peu de la longueur des vecteurs non ?

    Si quelqu'un a une autre proposition qui pourrait accélérer ce type de calcul, je suis preneur!

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

    Le mécanisme interne de la fonction cellfun est très proche de la boucle : il applique la fonction dont on passe le handle à chaque cellule. Donc c'est normal que les temps soient proches.

    Citation Envoyé par cailloup Voir le message
    Théoriquement avec Matlab et le calcul matriciel on pourrait avoir un temps de calcul qui ne dépend que très peu de la longueur des vecteurs non ?
    Le calcul matriciel va être en général plus rapide, mais va consommer plus de mémoire. Par contre, le temps de calcul sera toujours fortement dépendant de la taille des données.

    Il sera difficile je pense de faire mieux... Voici une petite amélioration en utilisant arrayfun :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    b = 1:4;
    arrayfun(@(x) a*x,b,'UniformOutput',false)

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    même résultat niveau temps de calcul
    mais l'écriture est un peu moins lourde

    Je resterai la dessus alors
    Merci pour l'aide

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

Discussions similaires

  1. Produit matrice-vecteur
    Par quiqui191 dans le forum Fortran
    Réponses: 1
    Dernier message: 03/02/2011, 14h48
  2. [XL-2003] Produit de cellules de provenance variable
    Par Gayzou dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/11/2010, 09h49
  3. Réponses: 12
    Dernier message: 03/08/2010, 18h54
  4. produit matrice-vecteur sous forme additive
    Par djocin dans le forum Fortran
    Réponses: 4
    Dernier message: 04/05/2010, 10h00
  5. Produit Matrice VBA
    Par mcalus dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/01/2010, 12h36

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