finding max value in a matrix
Afficher commentaires plus anciens
I have a matrix with 5 columns and one million rows. How can I find the max value of every 60 rows in that rows of million
Réponse acceptée
Plus de réponses (1)
I would split the matrix into a cell array of 60 rows with mat2cell and then use cellfun (or a loop) to find the max of each cell:
numsplit = ceil(size(m, 1) / 60); %how many cells are needed
rowdist = ones(1, numsplit) * 60; %define the row split
rowdist(end) = mod(size(m, 1), 60); %adjust last distance to be the modulo of row by 60
c = mat2cell(m, rowdist, size(m, 2)); %create a cell array where each cell is 60 rows
if isempty(c{end}) %will happen when size(m, 1) is a multiple of 60
c(end) = [];
end
mx = cellfun(@(mm) max(mm(:)), c);
4 commentaires
mx = cellfun(@(mm) max(mm(:)), mat2tiles(m,60,1));
It probably should read:
mx = cellfun(@(mm) max(mm(:)), mat2tiles(m,60,Inf));
Matt J
le 28 Sep 2014
If that's what the OP intended, then yes. You could also do
mx = cellfun(@(mm) max(mm(:)), mat2tiles(m,60) );
Jan
le 12 Oct 2014
You do not need the indirection over a cell. A 3D array is enough and much faster.
Catégories
En savoir plus sur Operators and Elementary Operations dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!