[英]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.