Python函数用于gen以外的循环

2024-10-02 22:26:29 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的函数总是使我的系统崩溃,因为它需要大量的计算能力。有没有办法替换函数内部的for循环,或者将它们与生成器或其他东西组合在一起放到外部?!你知道吗

充其量我需要一个合适的例子。你知道吗

def compute_mean_psd_csd(x, n_epochs, nfft, sfreq):
    '''Computes mean of PSD and CSD for signals.'''

    Rxy = np.zeros((n_epochs, channels, channels, n_freqs), dtype=complex)


    Rxx = np.zeros((n_epochs, channels, channels, n_freqs))
    Ryy = np.zeros((n_epochs, channels, channels, n_freqs))
    for i in xrange(0, n_epochs):
        print('computing connectivity for epoch %s'%(i+1))
        for j in xrange(0, channels):
            for k in xrange(0, channels):
                Rxy[i,j,k], freqs = mlab.csd(x[i,j], x[i,k], NFFT=nfft, Fs=sfreq)
                Rxx[i,j,k], _____ = mlab.psd(x[i,j], NFFT=nfft, Fs=sfreq)
                Ryy[i,j,k], _____ = mlab.psd(x[i,k], NFFT=nfft, Fs=sfreq)

    Rxy_mean = np.mean(Rxy, axis=0)
    Rxx_mean = np.mean(Rxx, axis=0)
    Ryy_mean = np.mean(Ryy, axis=0)

    return freqs, Rxy, Rxy_mean, np.real(Rxx_mean), np.real(Ryy_mean)

Tags: infornpzerosmeanepochschannelspsd
1条回答
网友
1楼 · 发布于 2024-10-02 22:26:29

也许你应该考虑一下并行化你的循环。如果您知道通道或n洎epoch的长度,您可以使用更多的内核,并使用此模块来实现这一点。你知道吗

https://pythonhosted.org/joblib/parallel.html

这里你可以看到一个简单的例子:

>>> from math import sqrt
>>> from joblib import Parallel, delayed
>>> Parallel(n_jobs=2)(delayed(sqrt)(i ** 2) for i in range(10))
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]

相关问题 更多 >