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 :

Matlab et varimax


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Par défaut Matlab et varimax
    Salut!

    J'ai utilisé une ACP pour rechercher ce qui varie le plus dans mes images de 100x100pixels. Donc j'ai utilisé princomp sur une matrice de 3150 par 10000. J'obtiens donc COEFF, LATENT et SCORE. Maintenant j'aurais voulu faire une rotation varimax sur mes données. J'ai donc essayé ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COEFFnew = rotatefactors(COEFF);
    Malheureusement j'ai ce message d'erreur:

    ??? Error using ==> svd
    Input to SVD must not contain NaN or Inf.

    Error in ==> rotatefactors>orthomax at 205
    [L, D, M] = svd(A' * (d*B.^3 - gamma*B * diag(sum(B.^2))));

    Error in ==> rotatefactors at 152
    [B, T] = orthomax(A, 1, normalize, reltol, maxit);
    Est-ce que je fais quelque chose de faux? Comment puis-je résoudre ce problème?
    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Le message indique juste qu'il y a des NaN ou des Inf dans le calcul fait par SVD.
    C'est donc que ta matrice d'entrée COEFF ne doit pas être "normale".
    A quoi ressemble-t-elle ?
    Y aurait-il des données inconnues (NaN ou Inf) dedans ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Par défaut
    Ben pourtant non a priori:
    COEFF est une matrice de 10000x3149 (la sortie de princomp)
    et si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    X=find(isnan(COEFF(:))==1);
    Y=find(isinf(COEFF(:))==1);
    X et Y sont vides donc il ne devrait pas y avoir de NaN ni de Inf...

  4. #4
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Comme c'est l'entrée de SVD qui pose problème il faudrait que tu fasses les calculs en pas à pas pour voir à quel moment ça dégénère.
    Soit tu le fais en mode debug, soit tu écris en ligne de commande chaque ligne de la fonction ROTATEFACTORS pour voir où ça coince.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Citation Envoyé par soeursourire Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    X=find(isnan(COEFF(:))==1);
    Y=find(isinf(COEFF(:))==1);
    A noter que le test s'effectue plus proprement comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    X = any(isnan(COEFF(:)));
    Y = any(isinf(COEFF(:)));

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Par défaut
    Si j'essaye sur une matrice aléatoire de la meme taille j'ai un problème de mémoire vous croyez que mon problème pourrait venir de la taille de ma matrice?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C=rand(10000,3149);
    Cb=rotatefactors(C);
    ??? Out of memory. Type HELP MEMORY for your options.

    Error in ==> rotatefactors>orthomax at 205
    [L, D, M] = svd(A' * (d*B.^3 - gamma*B * diag(sum(B.^2))));

    Error in ==> rotatefactors at 152
    [B, T] = orthomax(A, 1, normalize, reltol, maxit);

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Par défaut
    En faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    X = any(isnan(COEFFs(:)));
    Y = any(isinf(COEFFs(:)));
    X=0 et Y=0

Discussions similaires

  1. [LabView-MATLAB] Conversion de fichier binaire
    Par flzox dans le forum LabVIEW
    Réponses: 3
    Dernier message: 20/01/2007, 18h42
  2. [visual C++/Matlab] communication entre les deux
    Par Bilouzzz dans le forum MFC
    Réponses: 2
    Dernier message: 15/10/2005, 05h05
  3. Réponses: 2
    Dernier message: 02/09/2005, 15h23
  4. Clone Matlab
    Par devmat dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 30/04/2005, 16h44
  5. OpenGl - Matlab
    Par ManuG dans le forum OpenGL
    Réponses: 2
    Dernier message: 19/01/2005, 15h04

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