微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

制作一个多维numpy数组

如何解决制作一个多维numpy数组

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

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) 的尺寸/形状,我希望它从每个通道中删除 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

解决方法

构建问题的另一种方法是这样的:你有二维数据。让我们将第一个称为“行”,将第二个称为“列”(这是标准词汇,但在您的应用程序中,它们可能是“时间”和“通道”)。您有 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 用向量 means 的长度 5 标识了您的 5 列。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。