find two minimum values not followed by each other.
2 次查看(过去 30 天)
显示 更早的评论
I am using mink(A,2) to find the two smallest values, but I need to find the two smallest values not followed by each other. How can this be done?
To illustrate: A(1; 1.2; 1.2; 0.7; 0.6; 0.61; 1; 1; 1.2;0.65) I want to find 0.6 and 0.65 and not 0.6 and 0.61.
采纳的回答
Ameer Hamza
2020-4-19
编辑:Ameer Hamza
2020-4-20
Try this. It also preserve the order of minumum values
A = [0.65;1.2;1.2;0.7;0.6;0.61;1;1;1.2;1];
[vals,idx] = mink(A,3);
if diff(idx(1:2))==1
I = sort(idx([1 3]));
min_vals = A(I);
else
I = sort(idx([1 3]));
min_vals = A(I);
end
Result:
I =
1
5
min_vals =
0.6500
0.6000
更多回答(2 个)
Mehmed Saad
2020-4-19
编辑:Mehmed Saad
2020-4-19
The long Method
A=[1;1.2;1.2;0.7;0.6;0.61;1;1;1.2;0.65];
miny = [];
for i =1:3
x = min(A);
A(A==x) = [];
if(i~=2)
miny = [miny x];
end
end
miny
The short one
A=[1;1.2;1.2;0.7;0.6;0.61;1;1;1.2;0.65];
B = sort(A);
miny = [B(1) B(3)]
3 个评论
Image Analyst
2020-4-19
So the long method is too long, but the short method is too short. Exactly how many lines of code do you want?
Image Analyst
2020-4-19
Try this:
A=[1;1.2;1.2;0.7;0.6;0.61;1;1;1.2;0.65];
% Plot, just for fun.
plot(A, 'r.-', 'MarkerSize', 30);
grid on;
% Find the values in ascending order, so the min value will be at location/index = 1.
[sortedA, sortOrder] = sort(A, 'Ascend')
% Now find the second lowest value but it can't be in the location next to the lowest value.
% Use diff() to see how many indexes the values are separated by each other by.
d = diff(sortOrder) % Don't want 1's
% Get min1 and min2 according to the non-consecutive criteria.
min1 = sortedA(1)
if d(1) ~= 1
% Not consecutive so we're OK.
min2 = sortedA(2) % Get the next one
else
% Consecutive so pick the next location with the next lowest value.
min2 = sortedA(3)
end
If it's homework, don't turn in my work as your own or you could get into trouble with your instructor.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!