How can I get a row vector where a specific element found is located within a matrix?
显示 更早的评论
I am trying to write a program that gives a row vector from a matrix that has the lowest element from a specific column. For example, say if I have the following,
A =
2009 8 2 4
2010 3 4 5
2011 6 9 1
2012 1 3 7
If I want to find the smallest value in column 3, which is 2, how do I get MATLAB to give the row where it is found, so that the result is
ans =
2009 8 2 4
I have been struggling with this for the past 2 days and I feel like because I've stared at this for so long I can't spot the problem. Can I get some help please?
采纳的回答
更多回答(1 个)
Erika
2012-10-10
0 个投票
3 个评论
Matt Tearle
2012-10-10
That's just an old trick for ignoring the first output from min -- you don't actually need the minimum value, just its location. But MATLAB assigns multiple function outputs by order; for min the first output is the minimum value, the second is its location. If you're using any recent version of MATLAB, a neater(?) solution is
[~,ii] = min(A(:,3));
out = A(ii,:);
BTW, is it possible that you would have multiple locations with the same minimum value? If so, how do you want to deal with it? Andrei's answer will give the first row that matches. If you need all rows that match:
idx = A(:,3)==min(A(:,3));
out = A(idx,:);
(Of course, both are equivalent if there's only one minimum.)
Andrei Bobrov
2012-10-10
编辑:Andrei Bobrov
2012-10-10
Hi Matt! Second part in my answer?(after 'or')
Matt Tearle
2012-10-15
Oh, yes, you're right -- I was a bit confused by the eps and didn't look too closely.
类别
在 帮助中心 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!