矩阵中的最大值,逐行 - matlab

时间:2013-11-27 15:41:10

标签: matlab max

我有一个m-by-n矩阵。对于每一行,我想找到k个最大值的位置,并将其他值设置为0。

Example, for k=2
                     I WANT
[1 2 3 5            [0 0 3 5
 4 5 9 3             0 5 9 0
 2 6 7 1]            0 6 7 0 ]

2 个答案:

答案 0 :(得分:2)

您可以使用sort的第二个输出轻松实现:

data = [ 1     2     3     5
         4     5     9     3
         2     6     7     1 ];
k = 2;

[M N] = size(data);
[~, ind] = sort(data,2);
data(repmat((1:M).',1,N-k) + (ind(:,1:N-k)-1)*M) = 0;

在示例中,这给出了

>> data

data =

     0     0     3     5
     0     5     9     0
     0     6     7     0

答案 1 :(得分:0)

您可以使用prctile命令查找每行阈值 prctile返回data行中值的百分位数,因此可以轻松调整以返回阈值,高于该阈值,每行k个最大元素存在:

T = prctile( data, 100*(1 - k/size(data,2)), 2 ); % find the threshold
out = bsxfun(@gt, data, T) .* data; % set lower than T to zero

对于我们提出的问题中发布的data矩阵

>> out
out =

 0     0     3     5
 0     5     9     0
 0     6     7     0