如何解决如何在Julia中将序列化矩阵写入二进制文件
我有以下3x2 Int16矩阵作为“ test_matrix”:
app
我期望二进制输出为12个字节
10 4
10 8
4 10
我尝试了以下选项:
0x0A 0x04 0x0A 0x08 0x04 0x0A
输出变为
我发现的是:
- 矩阵被序列化(这就是我想要的)
- 矩阵被换位(我不想要...)
- 整数变为64位而不是16位
- 前15个字节对我来说是无用的字节
有什么主意我应该如何正确地将序列化矩阵导出为二进制文件??
解决方法
要回答您的问题:
广告2)矩阵未转置-朱莉娅使用列主顺序,例如Fortran。如果要行主要顺序,可以使用transpose
来转置矩阵。
广告3)htol
仅由于您使用的是低位字节序计算机而起作用;在大端上,它将出错-使用htol.(test_matrix)
进行广播。同样很可能您实际上在矩阵中存储了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版本,操作系统和计算机)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。