Есть ли быстрый способ «сгладить» или сгладить только некоторые из первых измерений в массиве numpy?Как сгладить только некоторые размеры массива numpy
Например, учитывая NumPy массив размеров (50,100,25)
, размеры результирующие будет (5000,25)
Есть ли быстрый способ «сгладить» или сгладить только некоторые из первых измерений в массиве numpy?Как сгладить только некоторые размеры массива numpy
Например, учитывая NumPy массив размеров (50,100,25)
, размеры результирующие будет (5000,25)
Посмотрите на 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)
Небольшое обобщение ответа Александра - np.reshape может принимать -1 в качестве аргумента, что означает «общий размер массива делится на продукт всех других перечисленных размеров»:
например чтобы сгладить все, кроме последнего измерения:
>>> arr = numpy.zeros((50,100,25))
>>> new_arr = arr.reshape(-1, arr.shape[-1])
>>> new_arr.shape
# (5000, 25)
Небольшое обобщение на ответ Петра - вы можете указать диапазон над формой исходного массива, если вы хотите выйти за пределы трех одномерных массивов.
например. выравниваться все, но последние два размеров:
arr = numpy.zeros((3, 4, 5, 6))
new_arr = arr.reshape(-1, *arr.shape[-2:])
new_arr.shape
# (12, 5, 6)
EDIT: небольшое обобщение моего предыдущего ответа - вы можете, конечно, также указать диапазон в начале из RESHAPE тоже:
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)
Это может помочь http://stackoverflow.com/questions/13990465/3d-numpy-array-to-2d –
Вам нужен повторный курс на Numpy ndarray нарезка массива. Также известна как многомерная индексация массивов, см. Https://docs.scipy.org/doc/numpy-1.13.0/reference/arrays.indexing.html Массив разрезает ваш ndarray, используя квадратные скобки, и используйте разделитель запятой для разделения сколько каждого размера вы хотите. Он будет выглядеть примерно так (не точно): 'your_array [50: 100, 7,:]', который выравнивает 3d-объект до 2d, используя только срез номер 7 для второго измерения. –