选择数组中最大的M值,并将其余值设置为零而不更改索引

时间:2016-11-03 18:14:13

标签: arrays matlab

我想在数组中选择m个最大值,并将其他所有值设置为零。 我知道一条路线是按降序对数组进行排序,并将其他所有内容设置为零,但这会改变最大值的索引,而这不是我想要的。

有没有办法在没有循环的情况下做到这一点?我正在查看具有600,000多个元素的数组,所以我认为for循环需要太长时间。

基本上我想要的是:

SharedPreferences

但规模要大得多......

1 个答案:

答案 0 :(得分:3)

sort函数还可以返回已排序值的原始索引。使用这个,我们可以在前4个中找到的值的索引并将它们设置为零:

X = [1 4 6 90 10 32 433 69]
M = 4

[~, inds] = sort(X, 'descend');
Y = X;
Y(inds(M+1:end)) = 0;

结果:

Y =    
     0     0     0    90     0    32   433    69

请注意,即使numel(X) <= 4,此代码仍然有效。在这种情况下,索引Y的列表将仅为空,并且不会将任何元素设置为0。