下面的函数总是使我的系统崩溃,因为它需要大量的计算能力。有没有办法替换函数内部的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)
也许你应该考虑一下并行化你的循环。如果您知道通道或n洎epoch的长度,您可以使用更多的内核,并使用此模块来实现这一点。你知道吗
https://pythonhosted.org/joblib/parallel.html
这里你可以看到一个简单的例子:
相关问题 更多 >
编程相关推荐