如何在Julia中将序列化矩阵写入二进制文件
我将以下3x2 Int16矩阵作为“测试矩阵”: 我期望12字节的二进制输出如何在Julia中将序列化矩阵写入二进制文件,julia,Julia,我将以下3x2 Int16矩阵作为“测试矩阵”: 我期望12字节的二进制输出 0x0A 0x04 0x0A 0x08 0x04 0x0A 我尝试了以下选项: write("test.bin", htol(test_matrix)) 输出变成 我发现的是: 矩阵被序列化(这就是我想要的) 矩阵被转置(我不想要…) 整数变成64位而不是16位 前15个字节对我来说是无用的字节 知道如何将序列化矩阵正确导出为二进制文件吗?回答您的问题: Ad 2)矩阵不进行转置-Julia使
0x0A 0x04 0x0A 0x08 0x04 0x0A
我尝试了以下选项:
write("test.bin", htol(test_matrix))
输出变成
我发现的是:
知道如何将序列化矩阵正确导出为二进制文件吗?回答您的问题: Ad 2)矩阵不进行转置-Julia使用列主顺序,如Fortran。如果需要行主顺序,可以使用
转置
转置矩阵
Ad 3)htol
只有在使用little endian机器时才起作用;在big-endian上,它会出错-使用htol.(测试矩阵)
来广播它。而且很可能你的矩阵中存储了64位整数
有了这些注释,它在我的机器上就如您所期望的那样工作:
julia> test_matrix = Int16[10 4; 10 8; 4 10]
3×2 Array{Int16,2}:
10 4
10 8
4 10
julia> write("test.bin", htol.(transpose(test_matrix)))
12
julia> stat("test.bin")
StatStruct(mode=0o100666, size=12)
julia> read("test.bin")
12-element Array{UInt8,1}:
0x0a
0x00
0x04
0x00
0x0a
0x00
0x08
0x00
0x04
0x00
0x0a
0x00
(如果在运行代码时得到不同的结果,请指定您使用的版本、操作系统和机器?回答您的问题: Ad 2)矩阵不进行转置-Julia使用列主顺序,如Fortran。如果需要行主顺序,可以使用
转置
转置矩阵
Ad 3)htol
只有在使用little endian机器时才起作用;在big-endian上,它会出错-使用htol.(测试矩阵)
来广播它。而且很可能你的矩阵中存储了64位整数
有了这些注释,它在我的机器上就如您所期望的那样工作:
julia> test_matrix = Int16[10 4; 10 8; 4 10]
3×2 Array{Int16,2}:
10 4
10 8
4 10
julia> write("test.bin", htol.(transpose(test_matrix)))
12
julia> stat("test.bin")
StatStruct(mode=0o100666, size=12)
julia> read("test.bin")
12-element Array{UInt8,1}:
0x0a
0x00
0x04
0x00
0x0a
0x00
0x08
0x00
0x04
0x00
0x0a
0x00
(如果在运行代码时得到不同的结果,请指定Julia的版本、操作系统以及您正在使用的机器?我在我的机器上尝试过,但仍然无法工作。。。我有Julia版本1.5.0,Windows操作系统(x86_64-w64-mingw32)m LIBM:libopenlibm,LLVM:libLLVM-9.0.1(ORCJIT,sandybridge),这很奇怪。我有所有相同的,但我没有桑迪布里奇我有天湖,但它应该没有关系。当你运行我的代码并提到我时,你能发布你得到了什么输出吗?因为这似乎需要更多的讨论。它成功了,错误就在我这边。非常感谢你的帮助!我在我的机器上试过了,但还是不起作用。。。我有Julia版本1.5.0,Windows操作系统(x86_64-w64-mingw32)m LIBM:libopenlibm,LLVM:libLLVM-9.0.1(ORCJIT,sandybridge),这很奇怪。我有所有相同的,但我没有桑迪布里奇我有天湖,但它应该没有关系。当你运行我的代码并提到我时,你能发布你得到了什么输出吗?因为这似乎需要更多的讨论。它成功了,错误就在我这边。非常感谢你的帮助!