如何在矩阵中找到确切的最小值数?

时间:2014-11-17 10:36:54

标签: matlab matrix minimum

我想在矩阵中找到3个最小值。

例如:

7 7 11 5 6
8 9 6 3 2 
10 15 8 3 4
12 9 6 8 11

3个最小值:2,3,4。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

如果向量很大,对矩阵(O(n*log n))进行排序可能比进行三次线性搜索(O(n))花费更多时间。所以这样的事情实际上可能比排序数组和选择前三个值更快。

在我的计算机上,这种方法在大于1000-3000个元素的矢量上更快。

num_vals = 3
vals = zeros(num_vals,1);
for k = 1:3
   [min_val, idx] = min(A);
   vals(ii) = min_val;
   A(idx) = NaN;
end

举例说明:

A = rand(1e6,1);
S = A;

%% Linear search:
tic
for ii = 1:10
A = S;
num_vals = 3;
vals = zeros(num_vals,1);
for ii = 1:3
   [min_val, idx] = min(A);
   vals(ii) = min_val;
   A(idx) = NaN;
end
end
t1 = toc
A = S;

%% Sorting first:
tic
for ii = 1:10
   As = sort(A(:),'ascend');
   vals2 = As(1:3);
end
t2 = toc
isequal(vals, vals2)

t1 =
     0.0661
t2 =
     0.4781

ans =
     1

答案 1 :(得分:1)

这样的事情:

nrItems = 3;
yourAr  = [ 7 7 11 5 6 8 9 6 3 2 10 15 8 3 4 12 9 6 8 11 ];
sortAr  = sort(yourAr, 'ascend');


vals    = sort(1:nrItems)