Why is this function not recognizing the correct number of rows?

7 views (last 30 days)
In this function I am taking a matrix m where each row holds a student's grades and each column is a different assignment, and returning the lowest of the highest grade that each student achieved in any assignment. When I do minmaxgrade([74, 72, 78; 67, 89, 90; 89, 92, 100; 100, 80, 90]) I am getting a weird answer, ans = 67 72 78 instead of just 78.
Here's my code:
function M=minmaxgrade(m)
[R,~]=size(m);
M=min(max(m,[],R));
end

Accepted Answer

Roger Stafford
Roger Stafford on 28 Apr 2016
Change the line
[R,~]=size(m);
to
R = 2;
You want to do your maximizing along the second dimension, not the fourth. Your matrix doesn't even have four dimensions. Matlab should have issued an error message. Did it?
  2 Comments
Stephen23
Stephen23 on 28 Apr 2016
Edited: Stephen23 on 28 Apr 2016
@ Roger Stafford: actually throwing an error would be inconsistent with the standard behavior of MATLAB, which assumes that all trailing dimensions have size one:
>> X = [74, 72, 78; 67, 89, 90; 89, 92, 100; 100, 80, 90]
X =
74 72 78
67 89 90
89 92 100
100 80 90
>> X(:,:,:,1) % look, no error!
ans =
74 72 78
67 89 90
89 92 100
100 80 90
>> max(X,[],4) % also no error!
ans =
74 72 78
67 89 90
89 92 100
100 80 90
This is actually perfectly consistent: because there are infinite trailing singleton dimensions we can access any of them using indexing, or apply operations along any of them. And of course any operation that operates along one particular dimension does not affect the other dimensions, e.g.:
>> Y = randi(9,1,2,3)
Y(:,:,1) =
7 1
Y(:,:,2) =
3 1
Y(:,:,3) =
1 8
>> sum(Y,2) % does not change dims 1,3,4,5,6,7,8,...
ans(:,:,1) =
8
ans(:,:,2) =
4
ans(:,:,3) =
9
which means that summing along the fourth (implicit trailing singleton) dimension) is never an error:
>> sum(Y,4) % does not change dims 1,2,3,5,6,7,8...
ans(:,:,1) =
7 3
ans(:,:,2) =
9 1
ans(:,:,3) =
4 4
Given that trailing dimensions are implicitly one:
it would be bizarre and inconsistent to treat accessing any trailing higher dimension as an error case.

Sign in to comment.

More Answers (0)

Categories

Find more on Creating and Concatenating Matrices 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!