2017-10-24 12 views
1

Julia 0.5.0의 NetCDF 패키지를 사용하여 ~ 10 개의 다른 netcdf 파일에서 동일한 다차원 변수를 읽습니다. 파일을 반복 재생하고 현재 배열과 같은 배열을 만드는 것보다 하나의 포괄적 인 다차원 배열로 통합하는 더 좋은 방법이 있습니까?Julia의 ncread()를 다른 파일의 같은 변수에서 사용하기 위해 다차원 배열을 초기화하는 방법은 무엇입니까?

현재, 내 코드는 같은 설정 :

files = ["file1", "file2", "file3", ... , "file10"] 
#length(files) = 10 

var = Array{Array}(10) 

for i in collect(1:1:10) 
    var[i] = ncread(files[i], "x") 
end 

경우 작동하지만, 나중에 무엇인지에 치수 Y를 따라 평균을 원하기 때문에 원하는 포맷하지

size(var) = 10 

size(var[1]) = (192,59,193) #from file1 
. 
. 
. 
size(var[10]) = (192,59,193) #from file10 

현재 서브 어레이. 이상적으로, 나는 하나 개의 다차원 배열 varx을 읽을 수 ncread()을 사용하고자하는 등의 크기는

size(var) = (10,192,59,193) 

같다고 곳

var[1,:,:,:] #from file1 
. 
. 
. 
var[10,:,:,:] #from file10 

내가 hcat() 또는 push!()이 필요할 수도 있다고 생각하지만 'for 루프가 ncread() 출력을 처리하기 전에 다차원 배열을 초기화하는 방법을 모르겠습니까? 파일에서 ~ 8 변수에 대해이 작업을 수행해야하며 ncread()을 호출하기 전에 다른 변수의 크기 나 길이를 알지 못합니다.

답변

3
filenames = ["file$i" for i = 1:10]; # make some filenames 
ncread(filename) = rand(2,3,4) # define a dummy function similar to yours 

a = ncread(filenames[1]) # read the first file to get the size 
output = Array{Float64}(length(filenames),size(a)...); #preallocate the full array, lookup splatting to see how this works 
output[1,:,:,:] = a # assign the data we already read 
for i in 2:length(filenames) # read and assign the rest 
    output[i,:,:,:] = ncread(filenames[i]) 
end 
1

NCO이에 대한 ncecat을 사용

ncecat in*.nc out.nc 

을하지만, 머리가 폭발 할 위험이 있으므로 약간의 코드를 너무 많이하고.

+0

궁극적으로 합성 분석을 작성한 이래로 이것이 내가 찾고있는 것이라고 생각하지만 'ncecat'을 호출 할 때 불필요한 변수 크기를 줄이는 방법이 있습니까? 불필요한 방위각과 시간 차원을 갖는 축 대칭 분석을 합성하고 출력 파일 크기를 줄이는 것이 좋습니다. – LED

+0

크기가 "불필요한"경우 크기가 1이라고 나뉘어서 크기가 더 작아지고 여분의 공간을 차지하지 않습니다. 퇴행성 및 비 퇴행성 치수는 설명서에 설명 된 바와 같이 결합 이전에 평균 이상 (ncwa) 또는 초고 해 (-d)로 평균화 할 수도 있습니다. –