我想在数组中选择m个最大值,并将其他所有值设置为零。 我知道一条路线是按降序对数组进行排序,并将其他所有内容设置为零,但这会改变最大值的索引,而这不是我想要的。
有没有办法在没有循环的情况下做到这一点?我正在查看具有600,000多个元素的数组,所以我认为for循环需要太长时间。
基本上我想要的是:
SharedPreferences
但规模要大得多......
答案 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。