簡體   English   中英

制作多維 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) 的尺寸/形狀,我希望它從每個通道中移除 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM