summing every twelve files from multiple .mat files
    2 ビュー (過去 30 日間)
  
       古いコメントを表示
    
Hi everyone,
 I am new to Matlab. This may look trivial.  I have thousands .mat matrix files of size K(180, 360). I want to do two things:
- Read these files and summing every twelve files
- Clip the result from size (180, 360) to something like (100,100)
- save the results
This is what I have done:
dirname = uigetdir;
Files = dir(fullfile(dirname,'*.mat'));
Total = zeros(180,360);
N=length(Files);
for k=1:N 
   ppm.Frame=load(Files(k).name)); % read the files
   while k<= 12; 
     Total = Total + pp.Frame % do the summing of first twelve files here
     k = k+1;
   else 
     k=0;
     % How do I resize the result here?
     save(Total)
     clear Total 
  end
Help would be highly appreciated.
1 件のコメント
  Jan
      
      
 2015 年 4 月 6 日
				What exactly is "K(180, 360)"? How can files be added? Do you mean that the MAT-files contain a variables called "K", which has the size [180 x 360]? And you want to create the sum over these values? How is "every 12 files" defined? In alphabetical order? How should the clipping be applied exatcly? Do you want to remove the right, left, upper, lower rows and columns?
採用された回答
  Jan
      
      
 2015 年 4 月 6 日
        
      編集済み: Jan
      
      
 2015 年 4 月 6 日
  
      I've formatted your code properly. As soon as you do so, you can see, that there cannot be an else ibn a while loop. The for loop counter k should not be modified inside the loop - you will see a corresponding warning in the editor.
The code contains more problems, e.g. you read the file into "ppm.Frame", but try to access ""pp.Frame". I guess, you want something similar to this:
dirname = uigetdir;
Files = dir(fullfile(dirname,'*.mat'));
N     = length(Files);
count = 0;
for iFile = 1:N 
   if count == 0
      Total = zeros(180,360);
   end
   count = count + 1;
     FileData = load(fullfile(dirname, Files(iFile).name)); % read the files
     Total    = Total + FileData.Frame;
     count    = count + 1;
     if count == 12
       % It is unclear how you want to "clip" Total.
       Total = ??? Perhaps resize()
       % Or: Total = Total(1:100, 1:100, :);
       save(Total)
       count = 0;
     end
  end
その他の回答 (0 件)
参考
カテゴリ
				Help Center および File Exchange で Workspace Variables and MAT Files についてさらに検索
			
	製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

