У меня есть функция, которая принимает массив значений и частоту дискретизации. Функция должна произвольно удалять значения по частоте дискретизации. Например, частота дискретизации 20% должна удалять 20% значений. Как я могу достичь этого с очень хорошей производительностью, потому что я буду перебирать более 10.000 значений?значения выборки в массиве с хорошей производительностью
Моя идея что-то вроде
for(var i = values.length-1; i >= 0; i--){
var rnd = Math.floor((Math.random() * 100) + 1);
if(rnd < samplingRate)
values.splice(i,1);
}
, но я думаю, что функция Math.random()
не производительный выбор.
Первый мне нужно уточнение: Вы хотите, чтобы удалить 20% всех значений, как вы описываете в тексте, или удалить все значения с шанс 20%, что вы делаете в коде? Это две разные вещи. В любом случае, нет пути вокруг 'Math.random', если вы не напишете собственный RNG, который вряд ли будет работать лучше. – RoToRa
Я сделал редактирование для моего вопроса. Это похоже на то, что я написал в тексте. –
Я не думаю, что многие операции «сращивания» после друг друга имеют хорошую производительность (вызов «Math.random» должен быть незначительным в сравнении). Возможно, вы захотите попробовать ['filter'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) (хотя это создает новый массив, а не удалив их из 'values') – Bergi