finding max value in a matrix
Show older comments
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
Accepted Answer
More Answers (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 Comments
mx = cellfun(@(mm) max(mm(:)), mat2tiles(m,60,1));
It probably should read:
mx = cellfun(@(mm) max(mm(:)), mat2tiles(m,60,Inf));
Matt J
on 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
on 12 Oct 2014
You do not need the indirection over a cell. A 3D array is enough and much faster.
Categories
Find more on Operators and Elementary Operations 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!