Créer un "cube" de données sous octave/matlab
Swiss Knight
Messages postés
2257
Statut
Membre
-
Swiss Knight Messages postés 2257 Statut Membre -
Swiss Knight Messages postés 2257 Statut Membre -
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
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
2 réponses
-
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... :'( -
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-