Отбросьте размеры Джулии массива длины 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)...))
Другие вопросы по тегам