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 :

Coercion automatique sur insertion


Sujet :

MATLAB

  1. #1
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut Coercion automatique sur insertion
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    class([true,1])    % -> double
    x= true; x(2)= 4; % -> true(2,1) !!!
    Pourquoi la coercion se fait-elle vers des booléens dans le cas 2 ?

    Imho, la seule raison valable serait de ne pas recopier la zone mémoire x avant l'insertion du 4.
    Je croyais que Matlab opérait une copie sur une telle insertion, enquel cas le cast vers double serait peu coûteux par rapport à la copie mémoire.
    S'agit-il d'un vecteur en zones non contiguës,ou ais-je raté quelque chose ?

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur en analyse décisionnelle
    Inscrit en
    Juin 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur en analyse décisionnelle

    Informations forums :
    Inscription : Juin 2013
    Messages : 113
    Points : 133
    Points
    133
    Par défaut
    Un variable conserve sa classe de création quoi qu'il se passe, tant qu'elle n'est pas redéfinie par écrasement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >> x = single(pi); class(x), x(:) = double(pi); class(x), x = double(pi); class(x)
    ans =
    single
    ans =
    single
    ans =
    double
    >> x = double(pi); class(x), x(:) = single(pi); class(x), x = single(pi); class(x)
    ans =
    double
    ans =
    double
    ans =
    single
    Imagine que tu te crées une énorme matrice en single pour sauver de la mémoire. Maintenant, disons que tu effectues des opérations sur cette matrice qui redéfinissent certaines valeurs. Il faudrait alors que tu t'assures à chaque fois que ces valeurs soient single, sinon insérer une valeur double modifierait la classe de la matrice en entier en double, ce qui serait désastreux au niveau de la mémoire!

    Il faudrait s'assurer de définir nos valeurs en single avant de les insérer, ce qui lourd à gérer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >> a = ones(3,'single'); class(a), b = 1; class(b), a(2,2) = b; class(a)
    ans =
    single
    ans =
    double
    ans =
    single
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >> a = ones(3,'uint8'); class(a), b = 1.6; class(b), a(2,2) = b; class(a), a
    ans =
    uint8
    ans =
    double
    ans =
    uint8
    a =
        1    1    1
        1    2    1
        1    1    1

  3. #3
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Merci Erco,

    Oui je suis d'accord avec ton argument. Cela dit, mon exemple n’était pas une insertion mais un redimensionnement. Pour que la copie mémoire n'aie pas lieu dans ce cas, il faut:
    - soit que Matlab gère des matrices sur des zones mémoires non contiguës, mais je croyais que seuls les cells étaient traités de la sorte.
    - soit qu'une zone mémoire plus grande que la taille initiale soit allouée. Dans ce dernier cas, la copie complète finira par se produire si on rajoute trop d'éléments, et donc le coerce n'est pas vraiment justifié à mes yeux.

    Quoiqu'il en soit, je pense q'un warning serait une bonne pratique ici.

Discussions similaires

  1. Insert ou Update automatique sur la table de jointure
    Par jeffray03 dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 17/07/2012, 15h58
  2. Execution automatique sur insertion prériph USB
    Par Bernard B dans le forum Windows 7
    Réponses: 7
    Dernier message: 08/07/2012, 09h32
  3. [XL-2003] insertion ligne automatique sur plusieurs feuille
    Par rdams dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/04/2010, 15h42
  4. Réponses: 4
    Dernier message: 13/03/2009, 13h55
  5. Execution automatique de scripts sur insertion ?
    Par apoingsfermes dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 30/11/2006, 17h49

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