Python 短标量中的Numpy溢出

Python 短标量中的Numpy溢出,python,numpy,memory,Python,Numpy,Memory,我用scipy.io.wav文件加载了一个大的.wav文件数组200k个样本。我尝试使用matplotlib.pyplot hist和自动组合生成数据的柱状图。它返回了错误: ValueError: Number of samples, -72, must be non-negative. 因此,我决定自己使用binwidth=1000设置垃圾箱: min_bin = np.min(data[peaks]) max_bin = np.max(data[peaks]) plt.hist(data

我用scipy.io.wav文件加载了一个大的.wav文件数组200k个样本。我尝试使用matplotlib.pyplot hist和自动组合生成数据的柱状图。它返回了错误:

ValueError: Number of samples, -72, must be non-negative.
因此,我决定自己使用binwidth=1000设置垃圾箱:

min_bin = np.min(data[peaks])
max_bin = np.max(data[peaks])
plt.hist(data[peaks], bins=np.arange(min_bin,max_bin, binwidth))
当我这样做时,它会给出错误:

RuntimeWarning: overflow encountered in short_scalars
from scipy.io import wavfile
以下是min_bin、max_bin和data的打印输出类型:

Type min_bin: <class 'numpy.int16'> max_bin: <class 'numpy.int16'>
min_bin: -21231 max_bin: 32444
Type data <class 'numpy.ndarray'>

问题似乎出在np.arange上,当我提供np.max和np.min.wav数组值的bin范围时,它失败了。当我在np.arange中手动输入max和min整数值时,它没有问题。我的假设是,在引用.wav数组时,这是某种寻址错误,但不确定如何修复它或它发生的原因。

不确定发生这种情况的确切原因很可能是numpy中的一个错误,但似乎将两个np.int16s传递给np.arange会破坏它。我在python控制台中试用了它,它只给了我一个空数组

解决办法很简单;只需先将参数转换为int。数组本身的数据类型仍然可以设置为np.int16以节省空间,因为这就是存储必要数据所需的全部内容

min_bin=intnp.mindata[峰值] max_bin=intnp.maxdata[峰值] plt.histdata[peaks],bin=np.arangemin\u bin,max\u bin,binwidth,dtype=np.int16
你能打印出typedata、min_bin、max_bin、typemin_bin和typemax_bin,看看输出是什么吗?抱歉,耽搁了,我已经添加了要求的打印输出