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

2024-09-30 04:27:03 发布

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

我被一个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,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)

希望你得到我想要的

大家好, 丹尼尔


Tags: for信号nprandom数组ampdurationx2
1条回答
网友
1楼 · 发布于 2024-09-30 04:27:03

要将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)返回数组的列表。那不是 与形状(2, 50)的数组相同。如果你能保证epochsx拆分为长度相等的数组,您可以使用

x2 = x.reshape(2, -1)

相反。那么x2将是形状(2, 50)数组reshape更快 因为reshape只需要在 array_split必须将数据分配并复制到新的数组中。不管怎样,这是 一般来说,最好将数据保存在一个大数组中,而不是将部分数据保存在一个列表中 数组,因为列表上的计算通常需要Python循环 使用NumPy时的性能问题。当然,有时Python会循环 无法避免,这里调用mlab.csd时似乎就是这种情况

相关问题 更多 >

    热门问题