簡體   English   中英

3d 陣列的錯誤整形

[英]Incorrect reshaping of 3d array

我正在對形狀為 1536 x 16 x 48 的矩陣進行一些處理。以下是有關此尺寸的一些詳細信息:

  • 1536:6秒內收集到的數據
  • 16:收集器的數量(在我的情況下是電極)
  • 48:樣本數

因此,從 16 個不同的收集器的角度來看,我有 1536 個值的 48 個樣本(代表 6 秒的數據)。

我的目標是對這個矩陣進行一些處理,但首先需要進行一些轉換。

  1. 由於 6 秒是一個大序列,我想將每個樣本分成更小的序列,特別是 3 或 2 秒。 例如,1 個 6 秒樣本 (1536) 可以拆分為 2 個 3 秒樣本 (768) 或 3 個 2 秒樣本 (512)。 這個變換矩陣的形狀是 go 從1536x16x48768x16x96 (3 秒)或512x16x144 (2 秒)。

  2. 一旦我有了這個新矩陣,我想重塑它,以便每個觀察者得到一個 2d 矩陣,並且所有值都以列而不是行組織(例如 2 秒拆分: 512x16x144 => 144x512x16 )。

  3. 最后,我現在可以遍歷第 3 維( 16 ),對每個 2d 矩陣進行一些計算(即快速傅立葉變換)並將它們全部歸約(求和)為一個,以獲得最終的144 x 512矩陣(在 2 秒內 -分割場景)。

以下代碼是我用numpy制作的,但是當我使用這種方法生成的 plot 樣本時,這對我來說顯然是錯誤的。

def generate_fft_data(data,labels, n_seconds_split=3):
    x = 256 * n_seconds_split
    y = 16
    z = 48 * int(6/n_seconds_split)
    data = data.transpose(2,0,1).reshape(x,y,z).transpose(2,0,1)
    fft_data = []
    for electrode in range(data.shape[2]):
        y_t = fft(data[:,:,electrode])
        fft_data.append(np.abs(y_t))
    sum_of_ffts = np.add.reduce(fft_data) 
    return sum_of_ffts

如果需要,我可以提供更多詳細信息。 提前致謝。

你可以試試這個:

def generate_fft_data(data,n_seconds_split=3):
    x_split = 6//n_seconds_split
    # split along 0 axis, stack pieces along the last axis and transpose
    arr = np.dstack(np.split(data, x_split)).transpose(2,0,1)
    fft_data = []
    for electrode in range(arr.shape[2]):
        y_t = fft(arr[:,:,electrode])
        fft_data.append(np.abs(y_t))
    sum_of_ffts = np.add.reduce(fft_data) 
    return sum_of_ffts
In [88]: data = np.ones((1536,16,48))
In [89]:  x = 256 * 3
    ...:  y = 16
    ...:  z = 48 * int(6/3)
In [90]: x,y,z
Out[90]: (768, 16, 96)
In [91]: data.transpose(2,0,1).shape
Out[91]: (48, 1536, 16)
In [92]: data.transpose(2,0,1).reshape(x,y,z).shape
Out[92]: (768, 16, 96)

將 [91] 重塑為 [92] 沒有意義。 它之所以有效,是因為數字“加起來”,但分布混亂。

我認為您想首先將 1536 維度拆分為 (2,768)(或等效的 3),然后將該 2 維度移動到末尾,並將其與 48 重新組合。

細節可能會有所不同,但這是一個這樣的序列:

data1 = data.reshape(2,768,16,48).transpose(1,2,0,3).reshape(768,16,96)

暫無
暫無

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

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