Fra*_*kje 2 arrays sorting matlab max
由于没有特殊原因,我想知道是否可以在一个数组或矩阵中选择n个最大值,所有这些都在oneliner中.
说我有阵列:
A=randn(1,100);
Run Code Online (Sandbox Code Playgroud)
我想要最大的,例如20个值,最好从高到低排序.到目前为止,我有2个班轮:
A_ordered = sort(A,'descend');
A_big20 = A_ordered(1:20);
Run Code Online (Sandbox Code Playgroud)
有谁知道这是否可能在一行?如果是这样,我会很感激线索,想法或答案!
你说你做了很多,所以最简单和最好的方法是在MATLAB路径上定义一个函数:
function B = topN(A, n)
if nargin==2 && n==0
B = []; return; end
B = sort(A(:));
if nargin>1 && n < numel(A)
B = B(1:n); end
end
Run Code Online (Sandbox Code Playgroud)
并称你的"一个"班轮:
top_ten = topN( randn(1,100), 10 );
Run Code Online (Sandbox Code Playgroud)
如果您希望它们按原始顺序(而不是排序):
function B = topN_unsorted(A, n)
if nargin>1 && n==0
B = []; return; end
if nargin==1 || n > numel(A)
B = A;
else
[B,I] = sort(A(:));
B = B(I(1:n));
end
end
Run Code Online (Sandbox Code Playgroud)