Как сложить несколько 2D массивов numpy в 3D массив numpy

#python #numpy #audio #multidimensional-array #numpy-ndarray

#python #numpy #Аудио #многомерный массив #numpy-ndarray

Вопрос:

Я извлекаю функции из аудиоклипов. При этом для 1 клипа получается матрица 20x2 размера. У меня есть около 1000 таких клипов. Я хочу сохранить все данные в 1 массиве numpy размерности 20x2x1000 . Пожалуйста, предложите метод для того же.

Комментарии:

1. np.array([list of clips]) даст вам массив (1000,20,2). Вы могли бы поменять оси на этом. Или используйте np.stack([list of clips], axis=2) .

Ответ №1:

Функция, которую вы ищете, является np.stack . Он используется для сложения нескольких массивов NumPy вдоль новой оси.

 import numpy as np

# Generate 1000 features
original_features = [np.random.rand(20, 2) for i in range(1000)]

# Stack them into one array
stacked_features = np.stack(original_features, axis=2)
assert stacked_features.shape == (20, 2, 1000)
  

Ответ №2:

Для этого есть удобная функция — numpy.dstack. Ниже приведен фрагмент кода для укладки массивов по глубине:

 # whatever the number of arrays that you have
In [4]: tuple_of_arrs = tuple(np.random.randn(20, 2) for _ in range(10))

# stack each of the arrays along third axis
In [7]: depth_stacked = np.dstack(tuple_of_arrs)

In [8]: depth_stacked.shape
Out[8]: (20, 2, 10)