Créer un "cube" de données sous octave/matlab

Fermé
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 - Modifié par Swiss Knight le 14/06/2011 à 16:14
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 - 15 juin 2011 à 08:36
Bonjour,

petite question toute simple ;
j'ai N matrices de même dimension (250x300) (un fichier texte par matrice)
et j'aimerai créer un tableau multidimensionnel avec ces matrices en les alignant les unes derrières les autres selon la profondeur pour avoir un tableau multidim. X = (250x300xN)

Comment y arriver en pouvant sélectionner les fichiers à charger dans cette matrice X ?

C'est surement très simple, mais je n'y arrive pas là :S
A voir également:

2 réponses

Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 110
14 juin 2011 à 16:27
J'en suis là mais sans succès :

[FILENAME, PATHNAME, FILTERINDEX] = UIGETFILE('*.txt','Choisissez vos matrices au format texte','MultiSelect','on')

for i=1:length(FILENAME)
file_name=strcat(PATHNAME,FILENAME{i});
tranche=load('-ascii',file_name);
M(:,:,i)=tranche;
end

il me sort dans M que le dernier fichier texte et c'est une simple matrice 2D... :'(
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
14 juin 2011 à 16:47
les tableaux multiD, je trouve que c'est un peu la merde.
déjà, fait des impressions de tes différentes valeurs : tranche, i et file_name pour vérifier que tu as bien un boucle.
tente M(i,:,:)=tranche;
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
14 juin 2011 à 16:51
je viens de tester sous octave 3.0.1, en fait, les deux notations fonctionnent avec une matrice 2×2. Le problème doit bien venir du reste du code.
0
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 110
Modifié par Swiss Knight le 15/06/2011 à 08:39
Salut,
le problème venait du fait qu'il fallait définir la taille du cube avant d'y mettre quelque chose apparemment...

Ce code fonctionne chez moi sous matlab (ça empile les matrices comme des feuilles de papier finalement) :
function [X] = loadmatrice () 
[matrices_tabcell, PATHNAME, FILTERINDEX] = uigetfile('*.txt','Choisissez vos matrices au format texte','MultiSelect','on') 
if ischar(matrices_tabcell) 
 M=load('-ascii',strcat(PATHNAME,matrices_tabcell)); 
 X(1,length(M),size(M,2))=zeros; 
 X(1,:,:)=M; 
elseif iscell(matrices_tabcell) 
    M=load('-ascii',strcat(PATHNAME,matrices_tabcell{1})); 
    X(size(matrices_tabcell,2),length(M),size(M,2))=zeros; 
    for i=1:length(matrices_tabcell) 
      N=load('-ascii',strcat(PATHNAME,matrices_tabcell{i})); 
            X(i,:,:)=N; 
    end 
end 
end


et presque le même sous octave :

function [X] = loadmatrices () 
matrices_tabcell=0; 
X=0; 
matrices_tabcell = zenity_file_selection('Choisir fichier(s)', 'multiple'); 
if ischar(matrices_tabcell) 
 M=load('-ascii',(matrices_tabcell)); 
 X(1,length(M),size(M,2))=zeros; 
 X(1,:,:)=M; 
elseif iscell(matrices_tabcell) 
 M=load('-ascii',(matrices_tabcell{1})); 
 X(size(matrices_tabcell,2),length(M),size(M,2))=zeros; 
 for i=1:length(matrices_tabcell) 
      N=load('-ascii',(matrices_tabcell{i})); 
            X(i,:,:)=N; 
     endfor 
endif 
X=X(:,2:end,2:end); 
Ex=X(1,:,2:end); 
Em=X(1,2:end,:); 
endfunction 



Je n'ai pas trouvé un moyen de visualiser une tranche de la matrice sous Matlab par contre sous Octave oui, pratique si l'on veut voir un peu comment c'est organisé au début pour vérifier le bon fonctionnement de sa fonction.

Encore juste une interrogation, dans mon code Octave, en bas, j'aimerai que ma fonction me sorte les deux variables Ex et Em, comment faire, elles sont internes même si j'écris "global" devant... :S

Bonne journée !
"Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement." -A. Einsten-
0