【问题标题】:Splitted Array being filled in for loop by function calculating values from a splitted array通过从拆分数组计算值的函数填充拆分数组
【发布时间】:2015-05-29 11:58:49
【问题描述】:

我遇到了一个 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 个 epoch 的拆分数组应该具有 (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)

希望你能得到我想做的。

您好, 丹尼尔

【问题讨论】:

    标签: python arrays function for-loop signal-processing


    【解决方案1】:

    要将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 更快 比array_split 因为reshape 只需要更改一个属性,而 array_split 必须将数据分配并复制到新数组中。更何况是 通常最好将数据保存在一个大数组中而不是列表中的部分 数组,因为列表上的计算通常需要 Python 循环,这些循环是 使用 NumPy 时性能的祸根。当然,有时 Python 循环 无法避免,就像这里调用mlab.csd 时的情况一样。

    【讨论】:

      猜你喜欢
      • 2020-02-28
      • 2021-05-31
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多