Отбросьте размеры Джулии массива длины 1
Скажите, если у меня есть 5D массив размером 1024x1024x1x1x100. Как я могу сделать новый массив размером 1024x1024x100?
Следующее работает, если вы знаете, какие измерения вы хотите сохранить раньше времени:
arr = arr[:, :, 1, 1, :]
Но я не знаю, какие размеры имеют какой размер раньше времени, и я хотел бы сохранить только размеры с логической маской; что-то вроде этого...
arr2 = arr[(size(arr) .> 1)]
1 ответ
squeeze
Функция была определена специально с целью удаления размеров длины 1. Из руководства:
Base.squeeze - функция.
squeeze(A, dims)
Удалите размеры, указанные dims из массива A. Элементы dims должны быть уникальными и находиться в пределах диапазона
1:ndims(A)
,size(A,i)
должен равняться 1 для всехi
вdims
,
Чтобы "сжать" все размеры размера 1 (когда они заранее неизвестны), нам нужно найти их и превратить в кортеж. Это достигается ((size(arr).==1)...)
, Итак, результат:
squeeze(a,(find(size(a).==1)...))