【发布时间】:2018-10-31 02:37:57
【问题描述】:
我想每次使用不同的nperseg、noverlap 和nfft 在循环中运行scipy.signal.spectrogram。但是我得到了:
TypeError: 'numpy.float64' 对象不能被解释为整数
这是我写的:
Fs=10e3
data = testData(Fs)
r = []
for i in numpy.linspace(-0.4, 0.4, 9):
t_step = 0.5+i
f_step = 0.5-i
window_length = round(2 * t_step * Fs)
noverlap = round(t_step * Fs)
nfft = round(Fs / f_step)
arr_f, arr_t, fft = scipy.signal.spectrogram(data, Fs,
nperseg=window_length,
noverlap=noverlap,
nfft=nfft,
window='hanning')
r.append((arr_f, arr_t, fft))
其中 testData 是从spectrogram documentation 复制的, Scipy 版本是 1.1.0。
当我使用常量硬编码 t_step 和 f_step(没有 +/- i)运行相同的代码时,在整个范围内一切都顺利进行。所以这是我的问题:
- 为什么它不起作用?
- 有没有办法不手动操作?
完整的追溯:
File "/Users/desktop/test.py", line 34, in main window='hanning')
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/scipy/signal/spectral.py", line 691, in spectrogram input_length=x.shape[axis])
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/scipy/signal/spectral.py", line 1775, in _triage_segments win = get_window(window, nperseg)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/scipy/signal/windows/windows.py", line 2106, in get_window return winfunc(*params)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/scipy/signal/windows/windows.py", line 786, in hann return general_hamming(M, 0.5, sym)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/scipy/signal/windows/windows.py", line 1016, in general_hamming return general_cosine(M, [alpha, 1. - alpha], sym)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/scipy/signal/windows/windows.py", line 116, in general_cosine w = np.zeros(M)
TypeError: 'numpy.float64' object cannot be interpreted as an integer
【问题讨论】:
-
显示完整的回溯(即完整的错误信息)。那里有有用的信息,包括产生错误的行。
-
round是 Python 内置函数还是numpy.round?如果您提供可以运行以重现错误的minimal, complete and verifable example,那么有人会更容易帮助您。 -
round是 Python 内置的函数,否则我会写numpy.round。我想这样做。您只需要导入 2 个库并从 scipy.signal.spectrogram 文档中复制代码。我怎样才能更好地改进它?
标签: python python-3.x numpy scipy