Maximum of Multidimensional Array using Flag Matrix

Howdy all,
I have a question that should be relatively straight forward, but is giving me a world of trouble. I have two identically sized matrices: one with a range of values and a second matrix that will serve to identify subsets within the first matrix. I have broken down my larger matrices into a fundamental process I'd like to complete, namely: find the maximum of the first matrix only if the second matrix has a zero (no identifier) at that position.
The following simple script should allow for the maximum to be identified, and then I set the identifier matrix to one to eliminate it from the next maximum calculation:
A = magic(7);
B = zeros(7, 7);
Maximum = 49;
while (Maximum > 25)
[Maximum, Index] = max(A(B == 0));
[I, J] = ind2sub(size(A(B==0)), Index);
B(I,J) = 1;
disp([Data, I, J])
end
which works for the first few iterations (Maximum = 49-46), but then produces the wrong index and then removes 1 from the index each additional iteration until reaching a constant value. I'm not sure why MATLAB is behaving like it is, but I would really appreciate any input on this problem. Thanks!

1 Comment

@Everett625: your code throws errors: first undefined Data, and then when I comment out that line some problem with matrix sizes. Please edit your question and provide a working example if you want help.

Sign in to comment.

Answers (1)

Matt J
Matt J on 22 Feb 2017
Edited: Matt J on 22 Feb 2017
Are you sure you don't want all the maxima excluded in each pass (in case it is non-unique)? What about as follows?
while (Maximum > 25)
Maximum = max(A(B == 0));
B(A==Maximum & B==0) = 1;
end

1 Comment

This solution is fine for determining the maximum and setting the flag matrix correctly, but it seems there is something wrong with ind2sub. If I try to find the indices using either my original code or your simpler setup, the ind2sub command returns the wrong i and j values. And I need those to pass into a subroutine that performs a flood fill in my A matrix and marks zones in the B matrix. Am I missing something with ind2sub?

Sign in to comment.

Products

Tags

Asked:

on 22 Feb 2017

Commented:

on 25 Feb 2017

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!