How to delete two minimum elements in a vector?
19 次查看(过去 30 天)
显示 更早的评论
wonder how to delete two minimum elements in the vector and then calculate the mean value of new vector
the vector is like A=[ 70, 56 , 30, 10 , 83 , 78, 77, 90]
code should be flexibe enough to calculate for any vectors
2 个评论
Walter Roberson
2019-1-20
Suppose A had three values that were all (say) 9. All 3 of them are the minimum. What do you want to do in that situation?
Image Analyst
2019-1-20
Your request is very imprecise.
What would you return for
v = [1 1 1 2 2 2 3]
??? Would you return
- [1 2 2 2 3] (removing a pair of 1's), or
- [3] (removing all the 1's and all the 2's?
采纳的回答
madhan ravi
2019-1-20
编辑:madhan ravi
2019-1-20
EDITED
n=2; % two smallest values
u=unique(A);
if numel(u)==1 || numel(u)==2
Result=[]
else
Result=mean(A(~ismember(A,u(1:n))))
end
6 个评论
madhan ravi
2019-1-20
Thank you sir Image Analyst edited the answer and sir Walter thank you for considering different situations.
更多回答(2 个)
Erik Keever
2019-1-20
Hmm. Perhaps,
% generate some random junk
x = round(10*rand([24 1]));
% sort array
[~, idx] = sort(x);
% sort the indices of the (N-2) largest elements, cutting the 2 smallest out and select subset
xTrimmed = x(sort(idx(3:end)));
I've taken that you mean to remove precisely two elements which are lexcographically smallest. My code breaks the degeneracy among multiple smallest values by choosing the first ones to occur in the array, such that among [4 1 1 0 4 4 4], the 0 and the first 1 will be removed. For large arrays, avoiding my lazy second sort() by building the subsets explicitly would be faster (removing one of two N log N sort procedures).
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!