函数通过计算拆分数组中的值来为循环填充拆分数组

丹尼尔·菲尔德斯(Daniel Fields)

我陷入了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循环中使用一个函数为拆分数组的每个段的每个值计算一个值...类似以下内容:

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为数组,请首先为该数组分配空间:

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

然后您可以Rxy使用循环填充行

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

顺便说一句,np.array_split(x,epochs)返回数组列表这与shape数组不同(2, 50)如果可以保证epochs拆分x成相等长度的数组,则可以使用

x2 = x.reshape(2, -1)

反而。然后x2将是一个形状数组(2, 50)reshape快于array_split因为reshape仅必须改变属性而array_split必须分配和数据复制到新的阵列。Moroever,通常最好将数据保存在一个大数组中,而不是将一部分保存在数组列表中,因为列表中的计算通常需要Python循环,这是使用NumPy时性能的祸根。当然,有时无法避免Python循环,这在调用时似乎是这种情况mlab.csd

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章