Numpy-как нарезка в Юлии - PullRequest
0 голосов
/ 27 мая 2018

В 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.

1 Ответ

0 голосов
/ 27 мая 2018

Обратите внимание, что в Python форма сохраняется только при разрезании первого измерения массива.В Julia вы можете использовать slicedim(A, d, i), чтобы нарезать размер d массива A по индексу i.

...