Добрый день всем, я помещал необработанные данные в числовые массивы, затем я хотел выполнить операции, как логарифм, основание 10, с "если" для этих массивов, тем не менее, эти числовые массивы слишком велики, и, следовательно, они принимают много времени для их завершения.
введите описание изображения здесь
x = [ 20*math.log10(i) if i>0 and 20*math.log10(i)>=-60 else (-(120+20*math.log10(abs(i))) if i<0 and 20*math.log10(abs(i))>=-60 else -60) for i in a3 ]
В предыдущем фрагменте кода я использовал один из массивов каналов, выброшенных из необработанных аудиоданных, "a3", и я создал другой массив, "x", который будет содержать массив для построения графика от -120 до 0, по краю у. Кроме того, как вы могли заметить, мне нужно было отделить положительные исходные элементы от массива numpy, чем отрицательные исходные элементы от массива numpy, а также 0 с -60 после операций 0. Имея этот последний график:
введите описание изображения здесь
Проблема с этим кодом заключается в том, что, как я уже говорил, для завершения вычислений требуется примерно 10 секунд, и это только для 1 канала, и мне нужно вычислить 8 каналов, поэтому мне нужно подождать примерно 80 сек.
Я хотел знать, есть ли более быстрый способ сделать это, кроме того, я нашел способ применить numpy.log10 ко всему массиву numpy, и он вычисляется менее чем за две секунды:
x = 20*numpy.log10(abs(a3))
Но я не нашел ничего, связанного с манипулированием настройками этой операции, numpy.log10, с помощью if, условных выражений или чего-то в этом роде. Мне действительно нужно идентифицировать отрицательные и положительные исходные значения, а также 0, и, очевидно, преобразовать 0 в -60, делая минимальный предел -60, и контрольную точку, как код, который я показал вам ранее.
Примечание: я уже пытался сделать это с помощью циклов, таких как "for" и "while", но это занимает намного больше времени, чем фактический метод, например, 14 секунд каждый.
Спасибо за ваши ответы !!