Я пытаюсь выяснить (в Юлии), как извлечь часть массива по указанному размеру, когда сами измерения являются переменной. Если размерность известна, легко извлечь часть массива. Например, я могу извлечь часть вдоль 3-го измерения, делая что-то вроде этого:Julia: Как извлечь часть массива по указанному размеру
A = rand(27,33,11)
A_portion = A[:,:,3:7]
Есть ли компактный/эффективный метод для извлечения части массива по переменной размерности? Например, что-то похожее на это?
A = rand(27,33,11)
dim = 3 ## dimension along which to grab a portion of the array
first_element = 3 ## first element over specified dimension
last_element = 7 ## last element over specified dimension
A_portion = MyFunction(A,dim,first_sample,last_sample)
Одна из возможностей состоит в написании набор IF-утверждений для каждой возможной комбинации размерности массива (до некоторого максимального числа измерений) и размерности, вдоль которой, чтобы извлечь часть. Например, что-то вроде этого:
MyFunction(A::Array,dim::Int,first_element::Int,last_element::Int)
if ndims(A)==1 && dim==1
return A[first_element:last_element]
elseif ndims(A)==2 && dim==1
return A[first_element:last_element,:]
elseif ndims(A)==2 && dim==2
return A[:,first_element:last_element]
elseif ndims(A)==3 && dim==1
...
...
...
Очевидно, что это становится довольно грязным для того, чтобы для массивов с большим числом измерений. Существует ли более компактный/эффективный подход для этого?
Отлично. Похоже, что даже можно указать диапазон индексов: 'A_portion = slicedim (A, dim, first_element: last_element)' – Landon