Array manipulation ... a better way?
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
Walter Roberson
2013-1-23
Note: please only indent your code, and not your text description. I have edited for clarity.
采纳的回答
Sarah Wait Zaranek
2013-1-25
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 个评论
Sarah Wait Zaranek
2013-1-25
I didn't see that you were indexing into another variable with your p values, but the idea should still hold.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!