Вам нужен курс повышения квалификации по нарезке массива numpy ndarray. Также известно как многомерные индексации массива, см: docs.scipy.org/doc/numpy-1.13.0/reference/arrays.indexing.html срез массива ваш ndarray с помощью квадратных скобок, и использовать запятую для разделения , сколько каждого размер, который вы хотите. Это будет выглядеть примерно так (не совсем так): your_array[50:100, 7, :]который сглаживает трехмерный объект до 2d, используя только срез номер 7 для 2-го измерения.
>>> 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)
Такие решения кажутся мне немного неэлегантными, поскольку они требуют некоторой избыточной информации. Хотелось бы, чтобы был способ сделать это, для чего требовалось только указать подмножество измерений, что-то вроде arr.flatten(dimensions=(0, 1)).
Denziloe
82
Небольшое обобщение ответа Александра - np.reshape может принимать в качестве аргумента -1, что означает «общий размер массива, деленный на произведение всех других перечисленных измерений»:
например, чтобы сгладить все, кроме последнего измерения:
your_array[50:100, 7, :]
который сглаживает трехмерный объект до 2d, используя только срез номер 7 для 2-го измерения.Ответы:
Взгляните на numpy.reshape .
источник
arr.flatten(dimensions=(0, 1))
.Небольшое обобщение ответа Александра - np.reshape может принимать в качестве аргумента -1, что означает «общий размер массива, деленный на произведение всех других перечисленных измерений»:
например, чтобы сгладить все, кроме последнего измерения:
источник
Небольшое обобщение ответа Питера - вы можете указать диапазон исходной формы массива, если хотите выйти за пределы трехмерных массивов.
например, чтобы сгладить все измерения, кроме двух последних :
РЕДАКТИРОВАТЬ: небольшое обобщение моего более раннего ответа - вы, конечно, также можете указать диапазон в начале изменения формы:
источник
Альтернативный подход - использовать,
numpy.resize()
как в:источник