【发布时间】:2020-07-29 14:57:54
【问题描述】:
我有一个形状为 (20,87) 的 2D NumPy 数组,现在我想追加多个这种类型的数组,这样在追加后假设其中的 100 个我的最终形状将是 (100,20,87)。
我尝试使用numpy.append() 进行正常附加,但没有成功。
编辑: 我已将链接附加到我的colab notebook。
这是我的代码:
audio_sr = []
x_train = []
y_train = []
x_test = []
y_test = []
for data in path:
ipd.Audio(data)
i = 0
label = 0
while i <= 120 :
audio, sr = librosa.load(data, offset=i, duration=2)
audio_sr.append((audio, sr))
i += 2
label += 1
all_mel_db = []
for audio, sr in audio_sr:
mel_spec = librosa.feature.melspectrogram(audio, sr = sr, n_mels = 20)
mel_db = librosa.power_to_db(mel_spec, ref = np.max)
all_mel_db.append(mel_db)
x_train = []
x_test = np.array(x_test)
x_train = np.dstack(all_mel_db).reshape((len(all_mel_db), 20, 87))
我得到了这个错误
ValueError:连接轴的所有输入数组维度 必须完全匹配,但沿着维度 1,索引 0 处的数组具有 大小为 87,索引 121 处的数组大小为 66
在重塑后使用 np.append(),我得到了
for mel_db in all_mel_db:
mel_db = np.reshape(1, mel_db.shape[0], mel_db.shape[1])
x_train = np.append(x_train, mel_db)
错误:
为数组排序检测到非字符串对象。请传入“C”, 改为“F”、“A”或“K”
然后简单地转换为 NumPy 数组:
x_train = np.array(all_mel_db)
我明白了:
ValueError: 无法将输入数组从形状 (20,87) 广播到 形状 (20)
【问题讨论】:
-
不要使用
np.append。它缓慢且难以正确使用。np.array([x,y,z,...])更好。 -
将你的第一个数组 say(x) 重塑为 (1, 20, 87),使用 np.append(x, y, axis = 0)
-
@RahulVishwakarma 我曾试图重塑它,但它给出了一个错误。我已附上我的代码的链接,请检查并告诉我出了什么问题。
标签: python-3.x numpy numpy-ndarray