制作多维 numpy 数组

Make a multidimensional numpy array

我需要去除信号的直流部分。 为此,我有以下代码:

def removeDC(seq):
    mean_seq = np.mean(seq)
    seq_mod = np.array([])
    for sample in seq:
        seq_mod = np.append(seq_mod,sample - mean_seq)
    return seq_mod

但是我的数据有 (31250, 5) 的 dimensions/shape,我希望它从每个通道中删除 DC。 这是我的尝试,但我不确定如何将正确的值添加到正确的频道索引

def removeDC(seq):  #removing dc from signal, slik at amplituden varierer rundt 0
    for i in range(0,seq.shape[1])):

        mean_seq = np.mean(seq[:,i])
        seq_mod = np.array([]) #need seq.shape[1] dimensions, problem here
        for sample in seq[:,i]: #problem here
            seq_mod[,i] = np.append(seq_mod, sample - mean_seq)#problem here
    return seq_mod

另一种构建问题的方法是这样的:您有二维数据。让我们调用第一个 'row' 和第二个 'columns'(这是标准词汇,但在您的应用程序中它们可能是 'time' 和 'channel')。您有 31250 行和 5 列。你想计算每列的平均值,给你一个包含 5 个值的向量。然后,对于 31250 行中的每一行,您想要删除 5 个平均值。让我们开始吧!

data = np.random.random(size=(31250,5)) # just some random values...
means = data.mean(axis=0) #compute mean along the columns 
data = data - means 

最后一行有效,因为 numpy 将您的 5 列标识为向量的长度 5 means

在您的具体情况下,您可能希望将它们称为

signals  = np.random.random(size=(31250,5))
dc_offset = signals.mean(axis=0)
centered_signals = signals  - dc_offset 

PS 查看广播的概念。它是编写可管理的 numpy 代码的关键。参见 https://numpy.org/doc/stable/user/basics.broadcasting.html