Переполнение, встречающееся в длинных скалярах - невозможно изменить numy или программа не работает - PullRequest
0 голосов
/ 13 января 2019

Я знаю, что этот вопрос задавался ранее, но применение ответа не решает мою проблему. Иногда я получаю сообщение об ошибке переполнения, и кажется, что может быть пустым массивом, но если я определю массив как int64 или float64, моя программа перестанет работать.

import wave
import struct
import numpy as np
myAudio = "C:\\Users\\mike\\Documents\\Correct2.wav"

def isSilence(windowPosition):
    sumVal = sum( [ x*x for x in sound[windowPosition:windowPosition+windowSize+1] ] )
    avg = sumVal/(windowSize)
    if avg <= 0.0001:
        return True
    else:
        return False

#read from wav file
sound_file = wave.open(myAudio, 'r')
samplerate = sound_file.getframerate()
file_length = sound_file.getnframes()
data = sound_file.readframes(file_length)
sound_file.close()
data = struct.unpack('{n}h'.format(n=file_length), data)
sound = np.array(data)

Я получаю сообщение об ошибке в строке sumVal.

если я изменю эту строку на:

sound = np.array(data,dtype="int64")

или

sound = np.array(data,dtype='float64')

ошибка исчезает, но мой код перестает работать. Я попытался преобразовать sumVal в int64 (потому что это кажется проблемой), но это не сработало (выдает ошибку типа данных), хотя я просто не понимаю, как это сделать. Любые подсказки?

Хорошо, я попробовал еще одну вещь - и это не похоже на ОЧЕНЬ большой прогресс, но это НИЧЕГО. Я сделал это:

sumVal = np.int64(1)

Что устраняет ошибку в следующей строке sumVal. Но теперь следующая строка:

avg = sumVal/(windowSize)

выдает ту же ошибку long_integer, хотя avg не должно быть целым числом. Я попытался определить windowSize таким же образом (int64), но это ничего не изменило. Так что, думаю, я запутался как никогда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...