代码之家  ›  专栏  ›  技术社区  ›  offeltoffel

Python:将numpy数组(int)写入二进制文件而不填充

  •  2
  • offeltoffel  · 技术社区  · 9 年前

    我有一个用Fortran创建的二进制文件,其中包含整数值作为记录。我想将它们读入Python,编辑为列表,并将它们保存回二进制,作为np数组。然而,出于某种原因,Python在文件中的每个记录后面插入了一个额外的“0”。我猜这就是他们所谓的“填充”,对吧?如何抑制这种情况?

    下面是一个独立的例子:

    import numpy as np
    
    content = np.array(range(20))
    
    # Write:
    with open('D:/bin_test.dat', 'wb') as write_binary:
        write_binary.writelines(content)
    
    # Read: 
    with open('D:/bin_test.dat', 'rb') as read_binary:
        content = np.fromfile(read_binary, dtype=np.int16)
    
    print content
    
    Out: 
    [ 0  0  1  0  2  0  3  0  4  0  5  0  6  0  7  0  8  0  9  0 10  0 11
    0 12 0 13  0 14  0 15  0 16  0 17  0 18  0 19  0]
    

    如果我通过读取Fortran二进制文件 np.fromfile 然后直接将其保存回二进制,效果很好。这就是为什么我猜问题发生在从列表到numpy数组的转换之后。

    谢谢

    1 回复  |  直到 9 年前
        1
  •  2
  •   Warren Weckesser    9 年前

    检查 content.dtype .看起来像是 np.int32 ,这通常是Windows上的默认整数类型。您正在写入32位整数,然后尝试将其读回为16位整数。所以结果中的其他值都是0。

    推荐文章