如何在Julia中将文件读取至Vector?
正确读取二进制文件中Vector的Julia实现方法
方法1:预先分配数组后原地读取
如果已经提前创建了对应长度的空数组,使用read!(带感叹号表示会修改传入的数组)实现高效批量读取:
# 用do块自动管理文件打开/关闭 open("example_vector.bin", "r") do ifile v2 = Vector{Int64}(undef, 1000000) read!(ifile, v2) # 在此处使用读取后的v2 end
read!会直接将文件中的二进制数据填充到预先分配好的数组中,无额外内存开销,性能最优。
方法2:直接读取生成数组
无需预先分配数组,通过指定元素类型和读取数量,read会自动创建并返回对应Vector:
open("example_vector.bin", "r") do ifile v2 = read(ifile, Int64, 1000000) # 在此处使用读取后的v2 end
这种方式简洁直观,底层同样是批量读取,不会逐个处理元素。
你尝试的写法问题说明
read(ifile, v):read没有接收已创建数组的重载,需要用read!来修改传入的数组。read(ifile, Vector{Int64}, 1000000):应传入元素类型(Int64)而非数组类型(Vector{Int64}),read会根据元素类型和数量自动生成数组。Vector{Int64, 1000000}:普通Vector的类型参数仅包含元素类型,无长度参数(仅静态数组如StaticArrays.SVector会包含长度参数),此写法为语法错误。read(ifile, ::Type{Vector{Int64}}, 1000000):函数调用时不能直接用::Type{...}作为参数,且此处仍应传入元素类型而非数组类型。
额外提示:推荐使用open的do语法,它会在代码块执行完毕后自动关闭文件,避免手动调用close时的遗漏。
内容的提问来源于stack exchange,提问作者user2138149
相关产品推荐
相关产品推荐

