Compress down a 1000x1000 matrix into a 100x100 matrix
54 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Ahmed Abdulla
am 7 Jun. 2020
Kommentiert: larasupernovae
am 3 Mär. 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 Kommentare
Akzeptierte Antwort
Ameer Hamza
am 7 Jun. 2020
Bearbeitet: Ameer Hamza
am 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 Kommentare
Robert Jansen
am 24 Mär. 2021
Amazing array of solutions. These all give the same results. The last one is surprisingly fast too. Thanks.
Weitere Antworten (2)
David Hill
am 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 Kommentare
Siehe auch
Kategorien
Mehr zu Resizing and Reshaping Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!