Как разрешить объект 'numpy.float64' нельзя интерпретировать как целое число? - PullRequest
0 голосов
/ 25 октября 2019

Я получаю эту ошибку, кто-нибудь может мне помочь?

TypeError: 'numpy.float64' объект не может быть интерпретирован как целое число.

   def stft(sig, frameSize, overlapFac=0.5, window=np.hanning):


     win = window(frameSize)
     hopSize = int(frameSize - np.floor(overlapFac * frameSize))

     # zeros at beginning (thus center of 1st window should be for sample nr. 0)
     samples = np.append(np.zeros(int(frameSize/2.0)), sig)    
     # cols for windowing
     cols = np.ceil( (len(samples) - frameSize) / float(hopSize)) + 1
     # zeros at end (thus samples can be fully covered by frames)
     samples = np.append(samples, np.zeros(frameSize))

     frames = stride_tricks.as_strided(samples, shape=(cols, frameSize),strides(samples.strides[0]*hopSize,samples.strides[0])).copy()
     frames *= win

     return np.fft.rfft(frames)
<ipython-input-113-e40a989a9c6b> in stft(sig, frameSize, overlapFac, window)
     10     samples = np.append(samples, np.zeros(frameSize))
     11 
---> 12     frames = stride_tricks.as_strided(samples, shape=(cols, frameSize), strides=(samples.strides[0]*hopSize, samples.strides[0])).copy()
     13     frames *= win
     14 

~\AppData\Roaming\Python\Python37\site-packages\numpy\lib\stride_tricks.py in as_strided(x, shape, strides, subok, writeable)
    101         interface['strides'] = tuple(strides)
    102 
--> 103     array = np.asarray(DummyArray(interface, base=x))
    104     # The route via `__interface__` does not preserve structured
    105     # dtypes. Since dtype should remain unchanged, we set it explicitly.

~\AppData\Roaming\Python\Python37\site-packages\numpy\core\numeric.py in asarray(a, dtype, order)
    536 
    537     """
--> 538     return array(a, dtype, copy=False, order=order)
    539 
    540 

TypeError: 'numpy.float64' object cannot be interpreted as an integer

Я не знаюГде проблема, я читал, это проблема версии Python, но это не так. Я не знаю, как решить!

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Проблема, вероятно, связана с переменной cols. np.ceil возвращает np.float64;да, это целочисленное значение, но все еще с плавающей точкой dtype. Перечитайте np.ceil документы.

In [77]: np.ceil(1.23)                                                          
Out[77]: 2.0
In [78]: type(_)                                                                
Out[78]: numpy.float64

In [79]: np.ones((2,_77))                                                       
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-79-af1036080a73> in <module>
----> 1 np.ones((2,_77))

/usr/local/lib/python3.6/dist-packages/numpy/core/numeric.py in ones(shape, dtype, order)
    212 
    213     """
--> 214     a = empty(shape, dtype, order)
    215     multiarray.copyto(a, 1, casting='unsafe')
    216     return a

TypeError: 'numpy.float64' object cannot be interpreted as an integer

Альтернатива находится в пакете math:

In [81]: import math                                                            
In [82]: math.ceil                                                              
Out[82]: <function math.ceil>
In [83]: math.ceil(1.23)                                                        
Out[83]: 2
In [84]: np.ones((1,math.ceil(1.23)))                                           
Out[84]: array([[1., 1.]])

cols = int(cols) также должна работать.

0 голосов
/ 26 октября 2019
def stft(sig, frameSize, overlapFac=0.5, window=np.hanning):
    win = window(frameSize)
    hopSize = int(frameSize - np.floor(overlapFac * frameSize))

    # zeros at beginning (thus center of 1st window should be for sample nr. 0)   
    samples = np.append(np.zeros(int(np.floor(frameSize/2.0))), sig)    
    # cols for windowing
    cols = np.ceil( (len(samples) - frameSize) / float(hopSize)) + 1
    # zeros at end (thus samples can be fully covered by frames)
    samples = np.append(samples, np.zeros(frameSize))

    frames = stride_tricks.as_strided(samples, shape=(int(cols), frameSize), strides=(samples.strides[0]*hopSize, samples.strides[0])).copy()
    frames *= win

    return np.fft.rfft(frames)    

Наконец-то я нашел решение. Большое спасибо!

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