2017-09-18 2 views
3

크기가 1024x1024x1x1x100 인 5D Array가 있다고 가정 해 봅시다. 1024x1024x100의 새로운 배열을 만들려면 어떻게해야합니까?길이가 1 인 Julia 배열 크기를

다음 작품 당신이 시간을 미리 유지하려는 치수 알고있는 경우 :

arr = arr[:, :, 1, 1, :] 

하지만 난 단지 유지하려는 미리 어떤 크기와있는 차원 모르는 을 부울 마스크가 주어진 차원; 이 같은 ...

arr2 = arr[(size(arr) .> 1)] 
+1

하는'스퀴즈 시도 '와 일반적으로'squeeze','reshape', 그리고'size' (A, (발견 (크기의 (a) == 1) ...).) 조작을해야합니다. –

+0

왜이 작업을 수행 하시겠습니까? –

+1

@DanGetz'squeeze'는 이것에 대해 정말 잘 작동합니다. 답으로 쓸 수 있으면 표시하고 해결할 수 있습니까? 감사! – tlnagy

답변

5

squeeze 기능이 설명서에서 길이 1의 치수를 제거하기 위해 특별히 정의 :

Base.squeeze - 기능.

squeeze(A, dims)

가 희미 해짐의 배열 요소 A.에서 희미 의해 지정된 치수의 범위 내에서 고유하고 1:ndims(A) 이어야 제거. size(A,i)은 모두 i의 경우 1이고, dims이어야합니다.

크기가 1 인 모든 크기 (미리 알 수 없을 때)를 "압착"하려면이를 찾고 튜플로 만들어야합니다. 이것은 ((size(arr).==1)...)에 의해 수행됩니다. 그래서 결과는 다음과 같습니다

squeeze(a,(find(size(a).==1)...)) 
+0

'squeeze'가 새로운 배열을 할당하기 때문에 실제로'reshape'를 사용하게 될지도 모르지만'squeeze'는이 경우를 위해 만들어진 것 같습니다. – tlnagy

+0

@tlnagy'squeeze'는'reshape'을 사용하여 구현되었으므로 사용할 수 있으며 새로운 배열을 할당하지 않습니다 (요소를 수정하여 테스트 함) –

관련 문제