Чтобы заменить отрицательные значения случайными значениями, существует один простой способ:
numpyarray = np.where(numpyarray < 0, np.random.uniform(0, 1, size=numpyarray.shape), numpyarray)
Однако это приведет к созданию множества случайных значений, которые не будут использоваться.Если вы хотите сохранить эту работу, вы можете сделать:
m = numpyarray < 0
numpyarray[m] = np.random.uniform(0, 1, size=np.count_nonzero(m))
Что касается шума, вы можете масштабировать его, но функцию в зависимости от интенсивности.Например,
numpyarray_noise = np.clip(numpyarray + RandomNoise() * (1 - numpyarray), 0, 1)
Использование (1 - numpyarray)
сделает шум меньше, чем выше интенсивность звука.Вы также можете использовать (1 - numpyarray) ** k
с некоторыми k > 0
, или что-то экспоненциальное, например np.exp(1 - 1 / (1 - numpyarray + eps))
.Вы также можете иметь какое-то правило, например «применить 10% шума и масштабировать остальные 90% в зависимости от интенсивности».