Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Julia中将序列化矩阵写入二进制文件_Julia - Fatal编程技术网

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

如何在Julia中将序列化矩阵写入二进制文件,julia,Julia,我将以下3x2 Int16矩阵作为“测试矩阵”: 我期望12字节的二进制输出 0x0A 0x04 0x0A 0x08 0x04 0x0A 我尝试了以下选项: write("test.bin", htol(test_matrix)) 输出变成 我发现的是: 矩阵被序列化(这就是我想要的) 矩阵被转置(我不想要…) 整数变成64位而不是16位 前15个字节对我来说是无用的字节 知道如何将序列化矩阵正确导出为二进制文件吗?回答您的问题: Ad 2)矩阵不进行转置-Julia使

我将以下3x2 Int16矩阵作为“测试矩阵”:

我期望12字节的二进制输出

0x0A 0x04 0x0A 0x08 0x04 0x0A
我尝试了以下选项:

write("test.bin", htol(test_matrix))
输出变成

我发现的是:

  • 矩阵被序列化(这就是我想要的)
  • 矩阵被转置(我不想要…)
  • 整数变成64位而不是16位
  • 前15个字节对我来说是无用的字节

  • 知道如何将序列化矩阵正确导出为二进制文件吗?

    回答您的问题:

    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),这很奇怪。我有所有相同的,但我没有桑迪布里奇我有天湖,但它应该没有关系。当你运行我的代码并提到我时,你能发布你得到了什么输出吗?因为这似乎需要更多的讨论。它成功了,错误就在我这边。非常感谢你的帮助!