2017-11-11 2 views
0

나는 Julia를 처음 사용하며 언어 사용 경험이 거의 없습니다. 나는 다차원 배열이 어떻게 작동하는지 이해하고 다른 차원에서 배열에 접근하는 방법을 이해하려고 노력 중이다. 설명서가 나를 혼란스럽게 만들었으니 여기 누군가가 더 잘 설명 할 수 있습니다.다차원 배열 Julia

배열 (m = Array {Int64} (6,3))을 만들고 해당 배열의 다른 부분에 액세스하려고합니다. 분명히 나는 ​​그것을 잘못 이해하고 있으므로 배열/다차원 배열에 대한 일반적인 도움이 도움이 될 것입니다.

감사

편집 나는 그 내용

58 129 10 
58 129 7 
25 56 10 
24 125 25 
24 125 15 
13 41 10 
0 

프로젝트의 목적은 (129분의 58)을이 분수를 가지고하는 것입니다 가지고있는 파일을 읽기 위해 노력하고 둥근 분수 farey 시퀀스를 사용합니다. 행의 마지막 번호는 양쪽 숫자가 아래에 있어야하는 번호입니다. 현재, 문제를 해결하는 방법에 대한 도움이 필요하지 않습니다. 마지막 행 (0)을 제외한 모든 숫자를 가진 다차원 배열을 만드는 방법입니다. 내 문제는 그것을 만든 후에 배열에 숫자를 저장하는 방법입니다.

그래서 m [0] [0] = 58이 필요합니다. 이 문법이 어떻게 작동하고 설명서가 혼란 스럽는지 나는 잘 모르겠습니다. 바라기를 이것은 충분한 정보입니다.

+1

. 너 뭐하려고? 너는 무엇을 기대하고 있니? 기대와 다른 점은 무엇입니까? –

+0

[매뉴얼] (https://docs.julialang.org/en/stable/manual/arrays/)을 이해하는 데 어려움이 있습니까? 그것의 특정 부분? –

+0

배열은 1- 색인입니다. 아마도 당신이 놓친 퍼즐 조각일까요? 좀 더 여유롭게 소개합니다 (https://en.wikibooks.org/wiki/Introducing_Julia/Arrays_and_tuples). – daycaster

답변

2

줄리아의 배열은 목록의 목록 또는 포인터의 배열이 아닙니다. 그것들은 하나의 컨테이너이며, 요소들은 직사각형 형태로 배열되어 있습니다. 따라서 m[j][i]과 같이 반복되는 색인 생성 호출을 사용하여 연속 측정 기준에 액세스하지 않고 대신 여러 색인과 함께 하나의 색인 호출을 사용합니다 (m[i, j]).

파일에서 마지막으로 0을 제거하면 기본 제공 readdlm을 사용하여 해당 파일을 행렬에로드 할 수 있습니다. 나는 그것이 좀 더 쉽게 여기에 수행 할 수 있도록 내 클립 보드에 그 처음 여섯 개 행을 복사 한 : 줄리아의 배열이 작동하는 방법을 가르치는 매우 도움이되지이다

julia> str = clipboard() 
"58 129 10\n58 129 7\n25 56 10\n24 125 25\n24 125 15\n13 41 10" 

julia> readdlm(IOBuffer(str), Int) # or readdlm("path/to/trimmed/file", Int) 
6×3 Array{Int64,2}: 
58 129 10 
58 129 7 
25 56 10 
24 125 25 
24 125 15 
13 41 10 

을하지만. m = Array{Int64}(6,3)과 같은 배열을 구성하면 6 개의 행과 3 개의 열로 배열 된 18 개의 요소로 초기화되지 않은 행렬이 만들어집니다. 이 사람에서의 10 자리의 행 번호와 열 번호를 가지고 배열의 값을 설정 한

julia> m .= [10,20,30,40,50,60] .+ [1 2 3] 
6×3 Array{Int64,2}: 
11 12 13 
21 22 23 
31 32 33 
41 42 43 
51 52 53 
61 62 63 

: 그것은 우리가 분별있는 패턴을 입력하면 사물이 작동하는 방법을 보려면 조금 더 쉽다 장소. m[r,c]에 액세스하면 행 rc에있는 m의 값이 반환됩니다.

julia> m[2,3] # second row, third column 
23 

이제 rc 정수가 될 필요가 없습니다 - 그들은 또한 여러 행이나 열을 선택하는 정수의 벡터가 될 수 있습니다 물론

julia> m[[2,3,4],[1,2]] # Selects rows 2, 3, and 4 across columns 1 and 2 
3×2 Array{Int64,2}: 
21 22 
31 32 
41 42 

2:4 같은 범위

그냥 자신을 벡터이다를 따라서이 예제를 m[2:4, 1:2]으로보다 쉽고 효율적으로 작성할 수 있습니다.

julia> m[1, :] # the first row of all columns 
3-element Array{Int64,1}: 
11 
12 
13 

julia> m[:, 1] # all rows of the first column 
6-element Array{Int64,1}: 
11 
21 
31 
41 
51 
61 

마지막으로, 줄리아의 Array이 열 전공 및 메모리에 연속적으로 배치 참고 : 자체로 :는에 차원이 인덱스 내의 모든 인덱스의 벡터를위한 속기이다. 즉, m[2]과 같은 하나의 색인 만 사용하면 첫 번째 열을 걸어 내려갑니다. 특별한 확장으로서, 우리는 일반적으로 "선형 인덱싱"이라고 불리는 것을 지원합니다. 여기서 단일 인덱스가 더 높은 차원으로 확장되도록 허용합니다. 그래서 m[7] 두 번째 열의 첫 번째 행으로 약 포장, 7 연속 요소에 액세스 : 당신은 좀 더 구체적으로 필요 해요

julia> m[5],m[6],m[7],m[8] 
(51, 61, 12, 22)