Python 3.x 使用scipy'的pycharm内存错误;s-welch函数

Python 3.x 使用scipy'的pycharm内存错误;s-welch函数,python-3.x,scipy,pycharm,Python 3.x,Scipy,Pycharm,我想用pycharm中的scipy.signal得到韦尔奇周期图。我的信号是一个5分钟的音频文件,Fs=48 kHz,所以我想这是一个非常大的信号。线路是: f, p = signal.welch(audio, Fs, nperseg=512) 我有一个记忆错误。我想知道这是pycharm配置的问题,还是信号太大了。我的内存是8GB 有时它可以处理一些音频文件,但想法是处理多个音频文件,因此一两个音频文件之后,错误就会出现。我已经测试了您的设置,welch似乎没有问题。为了进一步分析,需要运行

我想用pycharm中的scipy.signal得到韦尔奇周期图。我的信号是一个5分钟的音频文件,Fs=48 kHz,所以我想这是一个非常大的信号。线路是:

f, p = signal.welch(audio, Fs, nperseg=512)
我有一个记忆错误。我想知道这是pycharm配置的问题,还是信号太大了。我的内存是8GB


有时它可以处理一些音频文件,但想法是处理多个音频文件,因此一两个音频文件之后,错误就会出现。

我已经测试了您的设置,welch似乎没有问题。为了进一步分析,需要运行整个脚本

import numpy as np
from scipy.signal import welch

fs = 48000
signal_length = 5 * 60 * fs

audio_signal = np.random.rand(signal_length)
f, Pxx = welch(audio_signal, fs=fs, nperseg=512)
在我的计算机(windows 10,64位)上,它在调用
welch
期间消耗了600 MB的峰值内存,之后直接循环使用,此外,初始数组和Python本身的分配量约为600 MB。调用
welch
本身不会导致任何永久性的显著内存增加

您可以执行以下操作:

  • 升级至最新版本的
    scipy
    ,与之前的Welch一样
  • 检查您的电脑是否有足够的可用内存,并关闭内存不足的应用程序(如chrome)
  • 将数组转换为较低的数据类型,例如从
    float64
    转换为
    float32
    float16
  • 确保释放不再需要的变量。特别是如果加载多个信号并将结果存储在不同的数组中,它可能会快速累积。仅保留所需内容并通过
    del variable\u name
    删除变量,检查程序中其他地方是否没有剩余引用。例如,如果您不需要
    audio
    变量,可以在
    welch(…)
    之后显式删除它,或者用下一个音频数据覆盖它
  • 运行
    gc.collect()
    。然而,这可能无法解决您的问题,因为垃圾在Python中是自动管理的