Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

Array manipulation ... a better way?

Asked by Damo Nair on 23 Jan 2013

Hi,

I have a 2d array with 3 columns that look something like this ...

states
1  4  9
5  10  60
1  61  92
5  93  157
1  158 229
5  230 274

if the value in column 1 is 1 then I have to find the min value from a new array p, min(p(4:9)) & if its 5, the max, max(p(10:60)) for that value range listed in columns 2 & 3. The values in col. 1 take on values of either 1 or 5 only.

Now, I'm doing this in a loop in loop like ...

if states(i,1) == 1; q(i) = min(p(states(i,2):states(i,3)));
if states(i,1) == 5; q(i) = max(p(states(i,2):states(i,3)));

Isn't there a better way to do this?

Thanks

Damo.

1 Comment

Walter Roberson on 23 Jan 2013

Note: please only indent your code, and not your text description. I have edited for clarity.

Damo Nair

Tags

Products

No products are associated with this question.

1 Answer

Answer by Sarah Wait Zaranek on 25 Jan 2013
Accepted answer

You can do this with logical indexing (and not a for-loop)

q = zeros(length(p(:,1)),1);

Find where the first column is equal to 1.

idx1 = p(:,1) == 1;

Find the min of the next two columns where first column is equal to 1

q(idx1) = min(p(idx1,2:3),[],2);

Find where the first column is equal to 5

idx2 = p(:,1) == 5;

Find the min of the next two columns when first column is equal to 5

q(idx2) = max(p(idx2,2:3),[],2);

2 Comments

Sarah Wait Zaranek on 25 Jan 2013

I didn't see that you were indexing into another variable with your p values, but the idea should still hold.

Damo Nair on 26 Jan 2013

Thanks, Sarah.

Your method does indeed work! I can reference the 2nd array with those indices. Don't know why these things elude me sometimes :)

Have a good day.

Damo.

Sarah Wait Zaranek

Contact us