如何在Julia中将序列化矩阵写入二进制文件

问题描述

我有以下3x2 Int16矩阵作为“ test_matrix”:

app

我期望二进制输出为12个字节

10  4
10  8
4   10

我尝试了以下选项:

0x0A 0x04 0x0A 0x08 0x04 0x0A

输出变为

enter image description here

我发现的是:

  1. 矩阵被序列化(这就是我想要的)
  2. 矩阵被换位(我不想要...)
  3. 整数变为64位而不是16位
  4. 前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版本,操作系统和计算机)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...