Подтвердить что ты не робот

Как сгладить только некоторые размеры массива numpy

Есть ли быстрый способ "сгладить" или сгладить только некоторые из первых измерений в массиве numpy?

Например, если задано числовое число измерений (50,100,25), число результирующих размеров будет (5000,25)

4b9b3361

Ответ 1

Взгляните на numpy.reshape.

>>> arr = numpy.zeros((50,100,25))
>>> arr.shape
# (50, 100, 25)

>>> new_arr = arr.reshape(5000,25)
>>> new_arr.shape   
# (5000, 25)

# One shape dimension can be -1. 
# In this case, the value is inferred from 
# the length of the array and remaining dimensions.
>>> another_arr = arr.reshape(-1, arr.shape[-1])
>>> another_arr.shape
# (5000, 25)

Ответ 2

Небольшое обобщение на ответ Alexander - np.reshape может принимать -1 в качестве аргумента, что означает "общий размер массива, деленный на продукт всех других перечисленных размеров":

например. сгладить все, кроме последнего измерения:

>>> arr = numpy.zeros((50,100,25))
>>> new_arr = arr.reshape(-1, arr.shape[-1])
>>> new_arr.shape
# (5000, 25)

Ответ 3

Небольшое обобщение на ответ Питера - вы можете указать диапазон по исходной форме массива, если хотите выйти за пределы трехмерных массивов.

например. сгладить все, кроме последних двух измерений:

arr = numpy.zeros((3, 4, 5, 6))
new_arr = arr.reshape(-1, *arr.shape[-2:])
new_arr.shape
# (12, 5, 6)

EDIT: небольшое обобщение на мой более ранний ответ - вы, конечно, можете также указать диапазон в начале изменения:

arr = numpy.zeros((3, 4, 5, 6, 7, 8))
new_arr = arr.reshape(*arr.shape[:2], -1, *arr.shape[-2:])
new_arr.shape
# (3, 4, 30, 7, 8)