Compress down a 1000x1000 matrix into a 100x100 matrix
    13 views (last 30 days)
  
       Show older comments
    
    Ahmed Abdulla
 on 7 Jun 2020
  
    
    
    
    
    Commented: larasupernovae
      
 on 3 Mar 2022
            I have a 1000x1000 matrix that contains various values. I would like to compress it down into a 100 by 100 matrix by averaging each 10 by 10 cell's values into 1, but im not really sure how to go about doing this
0 Comments
Accepted Answer
  Ameer Hamza
      
      
 on 7 Jun 2020
        
      Edited: Ameer Hamza
      
      
 on 7 Jun 2020
  
      If you have image processing toolbox
M = rand(1000, 1000);
M_new = blockproc(M, [10 10], @(x) mean(x.data, 'all'))
Alternative Solution 1: (surprisingly the fastest)
M_new = conv2(M, ones(10)/100, 'valid');
M_new = M_new(1:10:end, 1:10:end);
Alternative Solution 2:
M_C = mat2cell(M, 10*ones(1,100), 10*ones(1,100));
M_new = cellfun(@(x) mean(x, 'all'), M_C);
Alternative Solution 3:
M_new = zeros(size(M)/10);
for i=1:100
    for j=1:100
        M_new(i, j) = mean(M(10*(i-1)+1:10*i,10*(j-1)+1:10*j), 'all');
    end
end
2 Comments
  Robert Jansen
 on 24 Mar 2021
				Amazing array of solutions. These all give the same results. The last one is surprisingly fast too. Thanks.
More Answers (2)
  David Hill
      
      
 on 7 Jun 2020
        count=1;
for col=1:100:1000
    for row=1:100:1000
        newMatrix(count)=mean(yourMatrix(row:row+99,col:col+99),'all');
        count=count+1;
    end
end
newMatrix=reshape(newMatrix,10,[]);
0 Comments
See Also
Categories
				Find more on Creating, Deleting, and Querying Graphics Objects in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




