1

SciPy を使用して Python でスクリプトを作成し、信号に対して短時間のフーリエ変換を実行しました。1000 のタイムポイントを持つシグナルで実行したところ、問題なく実行されました。100 万のタイムポイントを持つ信号で実行すると、コンピューターがフリーズしました (コンピューターが応答せず、オーディオが再生されている場合、コンピューターはスキップとループのバズを出力します)。これは、私が試みた3回すべてで一貫して発生しました。何時間もかかるスクリプトを書いたことがありますが、実際にコンピューターがフリーズするスクリプトに遭遇したことはありません。理由はありますか?スクリプトは以下に掲載されています。

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)
4

1 に答える 1

-1

スクリプトでは、あまりにも多くのポイントで実行すると RAM が大量に消費されます。「単純な python スクリプトでシステムがクラッシュする理由」を参照してください。

プログラムが実行されるプロセスは、計算用の配列と変数をラムであるプロセスメモリに保存します

これは、プログラムにハード ディスク メモリを強制的に使用させることで修正できます。

回避策 ( shelve、...) については、次のリンクを参照してください。

メモリ使用量、メモリを解放する方法

Python の大きな変数 RAM の使用量

RAM ではなくハード ドライブに Python 辞書を保存して、RAM を解放する必要があります。出来ますか?

于 2017-01-08T09:20:56.380 に答える