当NDIM在运行时可能发生变化时,如何在julia中使用HDF5编写块?

当NDIM在运行时可能发生变化时,如何在julia中使用HDF5编写块?,julia,hdf5,Julia,Hdf5,如果我有1000张64x64图像的切片,我可以这样写64x64x1块: using HDF5 filename = "test.h5" # open file fmode ="w" # get a file object fid = h5open(filename, fmode) # matrix to write in chunks B = rand(64,64,1000) # figure out its dimensions sizeTuple = size(B) ndims = len

如果我有1000张64x64图像的切片,我可以这样写64x64x1块:

using HDF5

filename = "test.h5"
# open file
fmode ="w"
# get a file object
fid = h5open(filename, fmode)
# matrix to write in chunks
B = rand(64,64,1000)
# figure out its dimensions
sizeTuple = size(B)
ndims = length(sizeTuple)
# set up to write in chunks of sizeArray
sizeArray = ones(Int, ndims)
[sizeArray[i] = sizeTuple[i] for i in 1:(ndims-1)] # last value of size  array is :...:,1
# create a dataset models within root
dset = d_create(fid, "models", datatype(Float64), dataspace(size(B)), "chunk", sizeArray)
[dset[:,:,i] = slicedim(B, ndims, i) for i in 1:size(B, ndims)]
close(fid)
这很好,但是dset[:,:,i]中的赋值语法特定于ndims=3。如果在运行时指定了任意超矩形的1000个切片,我该如何更改它?例如,对于B=兰特(64,64,31000)或兰特(64,64,64,31000)


谢谢

在这里发生了几次失误后,我从谷歌上的julia用户组那里得到了答案。它非常简单:

    using HDF5

    filename = "test.h5"
    # open file
    fmode ="w"
    # get a file object
    fid = h5open(filename, fmode)
    # matrix to write in chunks
    B = rand(64,64,1000)
    # figure out its dimensions
    Ndims = ndims(B)
    # set up to write in chunks of sizeArray
    sizeArray = ones(Int, Ndims)
    [sizeArray[i] = size(B, i) for i in 1:(Ndims-1)] # last value of size array is :...:,1
    # create a dataset models within root
    dset = d_create(fid, "models", datatype(Float64), dataspace(size(B)), "chunk", sizeArray)
    # write in slices of (:,:,i) 
    [dset[(fill(:,Ndims-1))...,i] = slicedim(B, Ndims, i) for i in 1:size(B, Ndims)]
    close(fid)
填充和飞溅。。。语法非常非常有用