2015-05-29 77 views
0

我陷入了for循环问题。分割数组被填充循环函数计算分割数组的值

我有一个信号作为一个数组,我分裂了在多个时代。

times = np.arange(0, duration, 1/sfreq) 
nse1 = np.random.rand(times.size) * nse_amp 
x = amp * np.sin(2 * np.pi * 200 * times   ) + nse1 
x2 = np.array_split(x,epochs) 

我为y信号做了第二次。 假设我的信号x具有(100)的形状,那么对于2个时期我的分裂阵列应该具有(2,50)的形式。

现在我想在使用功能循环来计算我分手阵列的每个段的每个值的值......喜欢的东西:

for i in range(0,epochs): 
    Rxy[i], freqs_xy[i] = mlab.csd(x2[i], y2[i], NFFT=nfft, Fs=sfreq) 

所以我会得到一个数组Rxy喜欢(2,50)

希望你得到我想要做的。

问候, 丹尼尔

回答

0

要构建Rxy为阵列,该阵列的第一分配空间:

for i in range(2): 
    Rxy[i], freqs_xy[i] = mlab.csd(x2[i], y2[i], NFFT=nfft, Fs=sfreq) 

Rxy = np.empty_like(x2) 
freqs_xy = np.empty_like(x2) 

然后可以使用循环中的Rxy行填


顺便说一下,np.array_split(x,epochs)返回数组的列表。这不是 与形状为(2, 50)的阵列相同。如果你能保证epochs 分裂x成相等长度的数组,你可以使用

x2 = x.reshape(2, -1) 

代替。然后x2将是形状为(2, 50)阵列reshape更快 比array_split因为reshape只需更改属性,而 array_split必须分配和复制数据到新阵列。无论如何, 通常更好地将数据保留在一个大阵列中,而不是数组中的部分,因为在列表上的计算通常需要Python循环,这是使用NumPy时性能的瓶颈。当然,有时Python循环 不能避免,因为在调用mlab.csd时看起来就是这种情况。