В Python / Numpy я могу нарезать массивы в следующем виде:
arr = np.ones((3,4,5))
arr[2]
, и форма будет сохранена:
(arr[2]).shape # prints (4, 5)
Это означает, что, если я хочу сохранитьформа массива, следующий код работает для N-мерных массивов
arr = np.ones((3,4,5,2,2))
(arr[2]).shape # prints (4, 5, 2, 2)
Это здорово, если я хочу написать функции, которые работают для N-dim массивов, сохраняя их вывод.
InЮлия, однако, то же действие не сохраняет структуру:
arr = ones(3,4,5)
size(arr[3]) # prints () (0-dimensinoal)
size(arr[3,:]) # prints (20,)
из-за частичной линейной индексации.Поэтому, если вы хотите сохранить исходные размеры, мне нужно написать arr[3,:,:]
, который работает только для трехмерных массивов.Если мне нужен массив 4D, я должен использовать arr[3,:,:,:]
и так далее.Код не является общим.
Более того, когда вы получаете массив, который имеет 5 или более измерений (как в случае, с которым я сейчас работаю), это обозначение становится чрезвычайно громоздким.
Есть ли способ, которым я могу написать код, как я делаю в Python и сделать его общим?Я даже не мог придумать хороший чистый способ изменения формы, не говоря уже о таком чистом способе, как Python.