Как сгладить только некоторые размеры массива numpy
Есть ли быстрый способ "сгладить" или сгладить только некоторые из первых измерений в массиве numpy?
Например, если задано числовое число измерений (50,100,25)
, число результирующих размеров будет (5000,25)
Ответы
Ответ 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)