簡體   English   中英

從形狀可變的2D numpy數組生成3D numpy數組?

[英]Generating a 3D numpy array from variably-shaped 2D numpy arrays?

我正在生成大量的Mel頻譜圖,以訓練NN進行音素檢測。

每個mel頻譜圖(由Python中的librosa.core.melspectrogram生成)都表示為2D numpy數組,其中軸1(向量的長度)因頻譜圖而異。 它們的形狀從(128,2)到(128,200)不等。

為了生成3D數組,所有頻譜圖必須具有相同的形狀,所以我猜我應該將零添加到小於200的向量的末端。然后我可以將它們全部添加到Python列表中,調用上面的np.array和3D numpy數組會生成,對不對?

我自己嘗試失敗。 感謝所有幫助。

編輯:(已請求代碼,這本質上是我想做的)

spectrograms = []

for audio_array in all_audio_arrays:
    audio_array, sr = librosa.core.load(audio_file, sr=sample_rate, mono=True)
    melspectrogram = librosa.feature.melspectrogram(y=audio_array, sr=sample_rate, S=None, n_fft=window_size, hop_length=hop_length)
    # melspectrogram is a 2D numpy array
    # the shape could be between (128, 2) and (128, 200)
    spectrograms.append(melspectrogram)

# I want this to be 3D
np.asarray(spectrograms)

如果您的學習者使用零填充是一種合適的方法,我將無法回答。 但是使用np.concatenate這樣做很容易

import numpy as np

a = np.ones((128,2))
b = np.ones((128,200))

padding = np.zeros((a.shape[0], b.shape[1] - a.shape[1])) #(128, 198)
a = np.concatenate((a, padding), axis=1)

print (a.shape)

>>> (128L, 200L)

暫無
暫無

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

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