현재 비트 검사 알고리즘을 파이썬과 numpy/scipy로 구현하고 있습니다. 기본적으로 .wav 파일을 읽고 처리해야합니다. 여기서 코드 :numpy 배열을 쌍으로 매핑
sampling_rate, wave_data = scipy.io.wavfile.read(argv[1])
wave_data
약 000 개의 요소 (441) (44.1 kHz 샘플링 레이트를 갖는 음성 10 초)과 1-D의 NumPy와 배열이다. 이제이 배열의 두 요소에 대해 기본적인 수학을 수행해야합니다. 이것은 지금 제가하는 방법입니다 :
wave_data = [sampling_rate * (wave_data[i+1] - wave_data[i])
for i in xrange(len(wave_data)-1)]
이 opreation은 (프로파일 링없이 눈에 띄는) 시간이 오래 걸립니다. 필자는 새로운 파이썬리스트를 만들지 않고 "in-place"배열을 쌍으로 매핑해야합니다. 나는 numpy.vectorize
이 있다는 것을 알고 있지만 매핑 쌍을 어떻게 할 수 있는지 모르겠습니다. (배열의 두 요소를 모두 매핑하십시오). 다음의
'wave_date [1 :]'과'wave_date [: - 1]'은 기존 배열에 대한 뷰를 생성하고 너무 많은 메모리를 소비하지 않는다는 것을 언급해야한다고 생각합니다. 그들의 차이가 새로운 배열을 만들지 만. – Bakuriu
작업으로 인해 나를 메모리 관리 괴물로 만들었으므로 아마도 'wave_data [1 :] - = wave_data [: - 1]; wave_data * = sampling_rate; wave_data = wave_data [: - 1]'이는 생성 할 배열이 없기 때문에 실제로는 조금 더 빨라질 수 있습니다. – Jaime