如何初始化多维数组以在不同文件中的同一变量上使用 Julia 的 ncread()?

How to initialize multidimensional arrays for using Julia's ncread() on the same variable in different files?

我正在使用 Julia 0.5.0 中的 NetCDF 包从大约 10 个不同的 netcdf 文件中读取相同的多维变量。有没有更好的方法来遍历文件并将它们合并到一个总体多维数组中,而不是像我现在这样创建一个数组数组?

目前,我的代码设置如下:

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

其中

size(var) = 10

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

有效,但不是所需的格式,因为我稍后想在当前子数组中沿维度 Y 取平均值。理想情况下,我想使用 ncread()x 读入一个多维数组 var,这样大小看起来像

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

哪里

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

我认为可能需要 hcat()push!(),但我不确定如何在 for 循环之前初始化多维数组以说明 ncread() 输出?我必须对文件中的 ~8 个变量执行此操作,并且在调用 ncread().

之前我不知道不同变量的尺寸或长度
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

NCO 为此使用 ncecat

ncecat in*.nc out.nc

但是,用这么少的代码做这么多事情可能会让你的脑袋爆炸。