为什么 运行 这个脚本冻结了我的电脑?

Why does running this script freeze my computer?

我在 Python 中编写了一个脚本,使用 SciPy 对信号执行短时傅里叶 t运行sform。当我 运行 它在具有一千个时间点的信号上时,它 运行 很好。当我 运行 它在具有一百万个时间点的信号上时,它冻结了我的计算机(计算机没有响应,如果正在播放音频,计算机会输出跳跃和循环的嗡嗡声);这在我尝试的所有三次中都一直发生。我写过需要花费数小时的脚本,但我从未遇到过真正让我的计算机死机的脚本。知道为什么吗?脚本贴在下面:

import scipy as sp
from scipy import fftpack

def STFT(signal, seconds_per_sample, window_seconds, min_Hz):
    window_samples = int(window_seconds/seconds_per_sample) + 1
    signal_samples = len(signal)
    if signal_samples <= window_samples:
        length = max(signal_samples, int(1/(seconds_per_sample*min_Hz)) + 1)
        return sp.array([0]), fftpack.fftshift(fftpack.fftfreq(length, seconds_per_sample)), fftpack.fftshift(fftpack.fft(signal, n = length))
    else:
        length = max(window_samples, int(1/(seconds_per_sample*min_Hz)) + 1)
        frequency = fftpack.fftshift(fftpack.fftfreq(length, seconds_per_sample))
        time = []
        FTs = []
        for i in range(signal_samples - window_samples):
            time.append(seconds_per_sample*i)
            FTs.append(fftpack.fftshift(fftpack.fft(signal[i:i + window_samples], n = length)))
        return sp.array(time), frequency, sp.array(FTs)

当您 运行 脚本中的点数过多时,脚本会消耗过多的 RAM,请参阅 Why does a simple python script crash my system

您的程序 运行s 的过程将用于计算的数组和变量存储在 进程内存 中,即 ram

您可以通过强制程序使用硬盘内存来解决这个问题。

解决方法(shelve,...)请参阅以下链接

memory usage, how to free memory

Python large variable RAM usage

I need to free up RAM by storing a Python dictionary on the hard drive, not in RAM. Is it possible?