How do I concatenate 3D arrays from multiple .mat files?
    2 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    Thaís Fernandes
 il 27 Lug 2018
  
    
    
    
    
    Commentato: Daianne Hofig
 il 1 Dic 2018
            I have 360 archives.mat, each with a variable 'A', of size 1800x400x1. I would like to concatenate these arrays in the third dimension, ie I would like an 'A1' of size 1800x400x360. For this I tried two things: 1) I used the 'cat' command (as in the code below), but it just saved the last array:
          d=dir('test/*.mat');%test is the name of my directory where these files are stored
          nn=length(d);
          A1=[];
          for ii=1:nn
             eval(['load teste/',d(ii).name]) 
             disp(d(ii).name)
             A1=cat(3,A);
          end
2) I tried to use [], but it only concatenates in the first or second dimension:
         d=dir('test/*.mat');
         nn=length(d);
         A1=[];
         for ii=1:nn
            eval(['load test/',d(ii).name]) 
            disp(d(ii).name)
            A1=[A1;A];
          end
Anyone have any suggestions on how to solve this? Thanks.
1 Commento
Risposta accettata
  Walter Roberson
      
      
 il 27 Lug 2018
        A1 = cat(3, A1, A);
but you could also use
A1(:,:,ii) = A;
and you could pre-allocated, like
          d=dir('test/*.mat');%test is the name of my directory where these files are stored
          nn=length(d);
          for ii=1:nn
             eval(['load teste/',d(ii).name]) 
             disp(d(ii).name)
             if ii == 1
               A1 = zeros(size(A,1), size(A,2), nn);
             end
             A1(:, :, ii) = A;
          end
However, you should avoid using eval:
          projectdir = 'test';
          d = dir( fullfile(projectdir, '*.mat') );
          nn = length(d);
          for ii=1:nn
             load( fullfile(projectdir, d(ii).name) ) 
             disp(d(ii).name)
             if ii == 1
               A1 = zeros(size(A,1), size(A,2), nn);
             end
             A1(:, :, ii) = A;
          end
and you should avoid using load() without any output:
          projectdir = 'test';
          d = dir( fullfile(projectdir, '*.mat') );
          nn = length(d);
          for ii=1:nn
             datastruct = load( fullfile(projectdir, d(ii).name), 'A' );
             A = datastruct.A; 
             disp(d(ii).name)
             if ii == 1
               A1 = zeros(size(A,1), size(A,2), nn);
             end
             A1(:, :, ii) = A;
          end
7 Commenti
  Walter Roberson
      
      
 il 30 Lug 2018
				I thought that was what my code did? What changes did you have to make?
Più risposte (0)
Vedere anche
Categorie
				Scopri di più su Logical in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!