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 :

Cannot write value: unsupported class cell


Sujet :

MATLAB

  1. #1
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut Cannot write value: unsupported class cell
    bonjour
    j'ai pas compris quel est l'erreur dans mon code et pour quoi WRITE ne supporte pas les tableau de cellules comme argument!!
    voila l'erreur:
    ??? Error using ==> fwrite
    Cannot write value: unsupported class cell
    Error in ==> App at 74
    fwrite(fid, [sic  sipa]', 'double');
    voila le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for i=1:a
    s1=trait1(Y);
    s2=trait1(X);
    sic{i}=s1;
    sipa{i}=s2;
    clear s1 s2
    fid = fopen([num2str(i) '.bin'],'w');
    fwrite(fid, [sic  sipa]', 'double');
    clear  sic sipa;
    fclose(fid);
    end

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,
    Citation Envoyé par syki.mail Voir le message
    pour quoi WRITE ne supporte pas les tableau de cellules comme argument!!
    Tout simplement parce que ce n'est pas prévu avec fwrite:
    Citation Envoyé par la doc de fwrite
    fwrite(fileID, A, precision)
    ...
    A Numeric or character array.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par magelan Voir le message
    Bonjour,

    Tout simplement parce que ce n'est pas prévu avec fwrite:
    bonjour
    alors comment je peux enregistrer mes données?

  4. #4
    Invité
    Invité(e)
    Par défaut
    En passant à fwrite un tableau simple au lieu d'un tableau de cellules.

  5. #5
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    En passant à fwrite un tableau simple au lieu d'un tableau de cellules.
    j'ai essayer de changer mon code mais j'obtiens cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> ctranspose
    Transpose on ND array is not defined.
     
    Error in ==> ess at 14
       fwrite(fid, [sic spa]', 'double');
    Ceci est a cause d'utilisation de transposition de tableau qui est une nécessité pour moi lors de lecture a partir de fichier.
    vola le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    A(2:4,2)=8;  A(3,3)=13;
    B(2:4,2)=7;  B(3,3)=73;
    sic=[];
    sipa=[];
    for j=1:2
      for i=1:3
       sic(:,:,i)=A;
       sipa(:,:,i)=B;
      end
       fid = fopen([num2str(j) '.bin'],'w');
       fwrite(fid, [sic sipa]', 'double');
       clear  siftacc siftspa;
       fclose(fid);
    end
    est ce que je peux trouver une autre forme de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sic(:,:,i)=A;
       sipa(:,:,i)=B;
    peut être ça peut résoudre mon problème.
    Remarque: je dois garder des deux boucle, le code juste un exemple réduit.

  6. #6
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Citation Envoyé par syki.mail Voir le message
    est ce que je peux trouver une autre forme de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sic(:,:,i)=A;
       sipa(:,:,i)=B;
    peut être ça peut résoudre mon problème.
    Remarque: je dois garder des deux boucle, le code juste un exemple réduit.
    yes you can! :

    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

  7. #7
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par tug83 Voir le message
    yes you can! :

    ceci ne résout pas le pb
    la meme erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ??? Error using ==> ctranspose
    Transpose on ND array is not defined.

  8. #8
    Membre habitué
    Homme Profil pro
    étudiant ingénieur traitement images médicales
    Inscrit en
    Juin 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : étudiant ingénieur traitement images médicales
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 74
    Points : 131
    Points
    131
    Par défaut
    tu cherches à faire la transposée d'une matrice 3D. Avec cette méthode c'est imposible. Un petit peu de lecture?


    http://matlab.developpez.com/faq/?pa...ay_not_defined


  9. #9
    Membre habitué
    Homme Profil pro
    étudiant ingénieur traitement images médicales
    Inscrit en
    Juin 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : étudiant ingénieur traitement images médicales
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 74
    Points : 131
    Points
    131
    Par défaut
    du coup, si tu poses une variable intermédiaire, ca te donne :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    
    fid = fopen([num2str(j) '.bin'],'w');
    t=[sic sipa];
    fwrite(fid, cat(3,t(:,:,1).',t(:,:,2).',t(:,:,3).'), 'double');
    clear  siftacc siftspa;
    fclose(fid);

  10. #10
    Invité
    Invité(e)
    Par défaut
    Une autre solution avec permute :

  11. #11
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    Une autre solution avec permute :
    bonjour
    merci pour les idées mais il faut savoir que c'est juste un petit exemple, et la boucle de i n'est pas toujours jusqu’à 3

  12. #12
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    voilà j'explique:
    j'ai une boucle pour écrire dans un fichier binaire qui fonctionne correctement (boucle1), maintenant j'ai changer mon code et j'ai ajouter une boucle for (i) au milieu pour regrouper quelques matrice avant les enregistrer dans un fichier qui porte le nom (j) (boucle 2).
    je dois garder la même manière pour l'enregistrement car ceci dépend d'une fonction de lecture a la suite. l’exécution de boucle2 engendre l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ??? Error using ==> ctranspose
    Transpose on ND array is not defined.
    j’espère trouver une solution.

    voila mon code(boucle1 et boucle2):
    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(2:4,2)=8;  A(3,3)=13;
    B(2:4,2)=7;  B(3,3)=73;
     
    %****************boucle1: fonctionne********************%
    for j =1:2
         sic=A;
        sipa=B;
    %[sic sipa]'
        fid = fopen([num2str(j) '.bin'],'w');
        fwrite(fid, [sic  sipa]', 'double');
     % clear  sic sipa;
        fclose(fid);
    end
    %***************boucle2:**********************%
    for j=1:2 %par eemple2
       for i=1:3 % par exemple 3
       sic(:,:,i)=A;
       sipa(:,:,i)=B;
       end 
     %[sic sipa]'
        fid = fopen([num2str(j) '.bin'],'w');
     %clear  sic sipa;
        fwrite(fid, [sic sipa]', 'double');
        fclose(fid);
    end
    %********************************************%

  13. #13
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    voila j'ajoute un exemple explicatif de ce que je cherche:
    soit A:
    0 0 0
    0 8 0
    et B:
    0 0 0
    0 7 0
    pour j=1
    i=1:3
    sic contient:
    0 0 0
    0 8 0
    0 0 0
    0 8 0
    0 0 0
    0 8 0
    et sipa contient:
    0 0 0
    0 7 0
    0 0 0
    0 7 0
    0 0 0
    0 7 0
    Maintenant lorsque la boucle i est terminer dans le fichier binaire je veux avoir ceci:
    0 0 0 0 0 0
    0 8 0 8 0 8
    0 0 0 0 0 0
    0 0 0 0 0 0
    0 7 0 7 0 7
    0 0 0 0 0 0
    c pour ca je dois faire la transposé: [sic sipa]'

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par syki.mail Voir le message
    mais il faut savoir que c'est juste un petit exemple, et la boucle de i n'est pas toujours jusqu’à 3
    Ton i parcours la troisième dimension sic(:,:,i) alors que 1, 2 et 3 concernent les dimensions dans permute. Je te conseille de lire sa documentation avant d'avancer ce genre de chose.

    Citation Envoyé par syki.mail Voir le message
    voila j'ajoute un exemple explicatif de ce que je cherche:
    Ici sic et sipa sont de taille 6x3 donc [sic sipa] de taille 6x6. La transposée est parfaitement définie sur un tableau 2D. Il n'y a aucun problème dans cet exemple.
    De plus je te conseille de lire ceci.

  15. #15
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    .

    Ici sic et sipa sont de taille 6x3 donc [sic sipa] de taille 6x6. La transposée est parfaitement définie sur un tableau 2D. Il n'y a aucun problème dans cet exemple.
    De plus je te conseille de lire ceci.
    Mais même avec cet exemple j'obtiens la même erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ??? Error using ==> ctranspose
    Transpose on ND array is not defined.
    voila l'exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    A=[0,0,0;0,8,0];
    B=[0,0,0;0,7,0];
    for j=1:2
       for i=1:3
       sic(:,:,i)=A;
       sipa(:,:,i)=B;
       end 
     fid = fopen([num2str(j) '.bin'],'w');
    fwrite(fid, [sic sipa]', 'double');
    fclose(fid);
    end

  16. #16
    Invité
    Invité(e)
    Par défaut
    Tu transposes des tableaux 3D Normal non ?
    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
    >> sic = [0 0 0
        0 8 0
        0 0 0
        0 8 0
        0 0 0
        0 8 0];
    sipa = [0 0 0
        0 7 0
        0 0 0
        0 7 0
        0 0 0
        0 7 0 ];
    [sic sipa].'
     
    ans =
     
         0     0     0     0     0     0
         0     8     0     8     0     8
         0     0     0     0     0     0
         0     0     0     0     0     0
         0     7     0     7     0     7
         0     0     0     0     0     0
    aucun problème sur un tableau 2D
    De plus il me semble que l'ont t'ai fourni tous les éléments nécessaires. Donc merci de faire un effort ! Là tu nous montres encore et toujours le même code.

  17. #17
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    bonjour
    voila la correction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    A(2:4,2)=8;  A(3,3)=13;
    B(2:4,2)=7;  B(3,3)=73;
    for j=1:2
        for i=1:3
            sic(:,:,i)=A;
            sipa(:,:,i)=B;
        end
        fid = fopen([num2str(j) '.bin'],'w');
        t=[sic sipa];
        %cat(3,t(:,:,1).',t(:,:,2).',t(:,:,3).')ou bien permute(t,[2 1 3]);
        fwrite(fid, cat(3,t(:,:,1).',t(:,:,2).',t(:,:,3).'), 'double');
        fclose(fid);
    end
    Merci pour l'aide

  18. #18
    Invité
    Invité(e)
    Par défaut
    Il y avait tout de même plus simple : opérer la transposée sur A et B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    A(2:4,2)=8;  A(3,3)=13;
    B(2:4,2)=7;  B(3,3)=73;
    for j=1:2
        for i=1:3
            sic(:,:,i)=A.';
            sipa(:,:,i)=B.';
        end
        fid = fopen([num2str(j) '.bin'],'w'); % je préfère sprintf('%d.bin',j)
        t=[sic ; sipa];
        fwrite(fid, t, 'double');
        fclose(fid);
    end

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

Discussions similaires

  1. sarg "Failed to save log source options : Cannot write to directory"
    Par neila7 dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 13/10/2016, 16h47
  2. Réponses: 3
    Dernier message: 05/04/2007, 10h05
  3. Cannot get value for expression
    Par MAKNI dans le forum JSF
    Réponses: 9
    Dernier message: 20/02/2007, 11h02
  4. Réponses: 3
    Dernier message: 19/10/2006, 21h51
  5. Réponses: 3
    Dernier message: 19/03/2006, 09h10

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