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

Swiss Knight Messages postés 1956 Date d'inscription   Statut Membre Dernière intervention   -  
Swiss Knight Messages postés 1956 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   110
 
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   Statut Contributeur Dernière intervention   1 299
 
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   Statut Contributeur Dernière intervention   1 299
 
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   Statut Membre Dernière intervention   110
 
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