分割数组被填充循环函数计算分割数组的值
问题描述:
我陷入了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)
希望你得到我想要做的。
问候, 丹尼尔
答
要构建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
时看起来就是这种情况。