首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从形状可变的2Dnumpy数组生成3Dnumpy数组?

从形状可变的2Dnumpy数组生成3Dnumpy数组?
EN

Stack Overflow用户
提问于 2018-04-18 02:33:51
回答 1查看 226关注 0票数 0

我正在生成大量的mel频谱图来训练用于音素检测的NN。

每个mel谱图(使用Python语言中的librosa.core.melspectrogram生成)表示为2D numpy数组,其中轴1(向量的长度)因谱图而异。它们的形状从(128,2)到(128,200)不等。

为了生成3D数组,所有频谱图都必须具有相同的形状,所以我猜我应该在小于200的向量的末尾添加零。然后,我可以将它们全部添加到Python列表中,对其调用np.array,然后就会生成一个3Dnumpy数组,对吧?

我自己也尝试过,但没有成功。感谢所有的帮助。

编辑:(代码已被请求,这基本上就是我想要做的)

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2018-04-18 03:06:28

我不能回答这是否是一种适合你的学习者填充零的方法。但是使用np.concatenate很容易做到这一点。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49885181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档