큰 매트릭스 data
을 특정 방식으로 "구성"하고 싶습니다. 행렬에는 5 개의 열과 약 200 만 개의 행이 있습니다. 첫 번째 4 개 열은 각 관측치의 특성이며 (정수입니다) 마지막 열은 관심있는 결과 변수입니다 (여기에는 실수가 포함되어 있습니다). 이 배열을 배열 배열로 구성하려고합니다. 나는 루프가 완료되면병렬 처리 데이터 처리
Error: syntax: invalid assignment location
: 나는 오류가 발생하지만 내가 for 루프를 실행하려고하면
addprocs(3)
@everywhere data = readcsv("datalocation", Int)
@everywhere const Z = 65
@everywhere const z = 16
@everywhere const Y = 16
@everywhere const y = 10
@everywhere const arr = Array{Vector}(Z-z+1,Y-y+1,Z-z+1,Y-y+1)
@parallel (vcat) for a1 in z:Z, e1 in y:Y, a2 in z:Z, e2 in y:Y
arr[a1-z+1,e1-y+1,a2-z+1,e2-y+1] = data[(data[:,1].==a1) & (data[:,2].==e1) & (data[:,3].==a2) & (data[:,4].==e2), end]
end
: data
이 매우 크기 때문에, 나는이 작업을 병렬화하기 위해 노력하고있어 모든 프로세서에서 arr
을 사용하고 싶습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
편집 : 매트릭스 data
이 (특별한 순서없이 행)과 같은 입력 :
16 10 16 10 100
16 10 16 11 200
20 12 21 13 500
16 10 16 10 300
20 12 21 13 500
공지 사항 일부 행이 반복 될 수 있음을, 그리고 몇몇 다른 사람은 동일한 "키"하지만 다른이있을 것이다 다섯 번째 열.
내가 원하는 출력이 (처럼 보이는나는 "사전"은 "키"로 arr
의 크기를 사용하고 어떻게주의 사항 :
arr[16-z+1, 10-y+1, 16-z+1, 10-y+1] = [100, 300]
arr[16-z+1, 10-y+1, 16-z+1, 11-y+1] = [200]
arr[20-z+1, 12-y+1, 21-z+1, 13-y+1] = [500, 500]
는, 인덱스 arr
의 요소가 (16-z+1, 10-y+1, 16-z+1, 10-y+1)
입니다 . 벡터 [100, 300]
나는 행의 순서 또는 벡터의 마지막 컬럼의 순서에 대해 걱정하지 않는다
왜 (vcat)를 사용하고 있습니까? 그것은'arr [a1-z + 1, e1-y + 1, a2-z + 1, e2-y + 1]의 모든 것을 함께 모으 겠지만'arr'의 해결책은 아닙니다. 반환 값을 사용해야합니까? 이 작업을하기 위해'arr'을 공유 배열이나 분산 배열로 만들거나, 할당을 취소하고 루프에서 ar을 만들 필요가 있다고 생각합니다. –
나는 당신의 질문을 오해한다는 것을 깨달았습니다. 나는 당신이 당신의 데이터를 근로자들 사이에 쪼개려고하고 있다고 생각했지만 실제로는 주 근로자를 사용하여 주 프로세스에서 데이터를 구성하는 것뿐입니다. –
어쨌든 @michael은 큰 노력에 감사드립니다. – amrods