2016-10-30 2 views
9

나는 줄리아에서 다차원 배열을 처리하는 방법을 알아 내려고하고 있습니다. 다차원 배열 A = rand(5,5,5) 있습니다.n 차원 배열을 통해 한계에 도달

A[1,1,:] 또는 A[1,:,1] 또는 A[:,1,1]을 입력 m에서 주어진 :의 위치와 함께 얻는 방법을 찾으려고합니다.

나는

indexData = [:,1,2] 
indexData[1],indexData[m] = indexData[m],indexData[1] 
data = A[indexData[1],indexData[2],indexData[3]] 

을 마련했지만이 지나치게 복잡해 보인다 A의 크기를 알 수 있다면 확장하지 않을 것입니다. 이 문제를 해결하는 더 좋은 방법이 있습니까?

+1

제목의 마진 화는 특정 차원에 대한 합산을 제안합니다 (한계 확률과 동일). 아이디어가 단지 요소를 선택하는 것이라면 제목이 혼란 스러울 수 있습니다. –

+0

예, 결국 지정된 치수를 무시하게 될 것입니다. 나는 logpdf를 다루고 있으므로 pdf를 직접 합할 수는 없다. 제목에 대해 더 좋은 아이디어가 있다면 기꺼이 변경해 드리겠습니다. – drd13

답변

8

다음은 지폐 맞 수도 다음

getshaft(A,ii,m) = [A[(i==m?j:ii[i] for i=1:length(ii))...] for j=1:size(A,m)] 

다음 예를 고려

julia> A = reshape(collect(1:27),3,3,3) 
3×3×3 Array{Int64,3}: 
[:, :, 1] = 
1 4 7 
2 5 8 
3 6 9 

[:, :, 2] = 
10 13 16 
11 14 17 
12 15 18 

[:, :, 3] = 
19 22 25 
20 23 26 
21 24 27 

julia> getshaft(A,(1,2,3),1) 
3-element Array{Int64,1}: 
22 
23 
24 

두번째 매개 변수는 소자의 인덱스이고, 상기 제 차원을 선택한다. getshaft은 세 번째 매개 변수에 의해 지정된 차원을 따라 두 번째 매개 변수에 의해 선택된 요소를 포함하는 값의 벡터를 반환합니다. 물론 첫 번째 매개 변수는 배열입니다. 슬라이스 인덱싱을 사용

getshaft(A,ii,m) = A[(i==m?Colon():ii[i] for i=1:length(ii))...] 

빠른 인덱스 계산이나 다른 AbstractArray 혜택을 누릴 수 있습니다

--- 업데이트 ---

빠른 검토, 동일한 기능의 더 빠르고 깨끗한 구현을 제안 백그라운드에서 마술입니다.

+0

고마워요. 정확히 내가 필요로하는 것입니다. – drd13

+1

감사합니다. 여기 누군가가 관심이 있다면 내가 결국 사용했던 것입니다. (길이 (ii) + 길이 (m))) ... '에 대해 shift (i, m) = A [ – drd13

관련 문제