如何从Julia中的二进制文件中读取特定元素?

如何从Julia中的二进制文件中读取特定元素?,julia,Julia,我有一个二进制文件。如果我想一次读取数组中的所有数字数据,代码如下: y = Array{Float32}(undef, 1000000, 1); read!("myfile.bin", y) 我将得到一个数组y,y是1000000*1数组{Float32,2} 我的问题是,我不想一次读取数组中的所有数据,因为它会占用大量内存。我想每次读取二进制文件中的一个特定元素。例如,我只想读取二进制文件中的第三个元素,即数组y中的第三个元素。如何执行此操作?如果只想读取单个元素,

我有一个二进制文件。如果我想一次读取数组中的所有数字数据,代码如下:

y = Array{Float32}(undef, 1000000, 1);

read!("myfile.bin", y)

我将得到一个数组y,y是1000000*1数组{Float32,2}


我的问题是,我不想一次读取数组中的所有数据,因为它会占用大量内存。我想每次读取二进制文件中的一个特定元素。例如,我只想读取二进制文件中的第三个元素,即数组y中的第三个元素。如何执行此操作?

如果只想读取单个元素,则无需读取数组:

io = open("myfile.bin", "r") # open file for reading
Nbytes = sizeof(Float32) # number of bytes per element
seek(io, (3-1)*Nbytes) # move to the 3rd element
val = read(io, Float32) # read a Float32 element
close(io)
fd = open("myfile.bin")
y = Mmap.mmap(fd, Vector{Float32}, 10000000)
println(y[3])
顺便说一句:如果您想为数据创建一个数组,您可能应该使用1000000长度的
数组{Float32,1}
,而不是100000x1大小的
数组{Float32,2}

y = Array{Float32}(undef, 1000000)
# or
y = Array{Float32, 1}(undef, 1000000)
# or
y = Vector{Float32}(undef, 1000000)
或者,您可以将文件作为数组进行访问:

io = open("myfile.bin", "r") # open file for reading
Nbytes = sizeof(Float32) # number of bytes per element
seek(io, (3-1)*Nbytes) # move to the 3rd element
val = read(io, Float32) # read a Float32 element
close(io)
fd = open("myfile.bin")
y = Mmap.mmap(fd, Vector{Float32}, 10000000)
println(y[3])
这将只使用虚拟内存,而不使用RAM。您还可以使其可写