Я прочитал (INT) 32 бит аудио data
(с учетом как строки с помощью предыдущих команд) в numpy.int32
массив с:Быстрое преобразование из строки в массив numpy.int16
myarray = numpy.fromstring(data, dtype=numpy.int32)
Но тогда я хочу сохранить его в память, как int16
(я знаю, что это уменьшит бит глубины/разрешение/качество звука):
myarray = myarray >> 16
my_16bit_array = myarray.astype('int16')
это работает очень хорошо, но: есть быстрее решение? (здесь я использую: строковый буфер, 1 массив в int32, 1 массив в int16, я хотел знать, можно ли сохранить один шаг)
Спасибо. Будет ли это «вид» из большого массива numpy? (то есть весь 32-битный массив останется сохраненным в памяти). Кажется, что последний массив 'int16' не будет иметь смежных данных. – Basj
Да, это будет вид. np.ascontiguousarray можно использовать, если требуется соприкосновение, которое сделает копию. Это должно быть быстрее, чем побитовое действие и бросок; его единственный проход по массиву. –
Было бы что-то вроде 'np.ascontiguousarray (np.fromstring (data, dtype = np.uint16) [0: 2])'? Кстати, какой инструмент/команда профилировщика вы использовали бы здесь для сравнения скорости? (может быть, у вас есть пример?) – Basj