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

标签 python python-2.7 numpy io binary

我有一个用 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]

如果我通过 np.fromfile 读取 Fortran 二进制文件并将其直接保存回二进制文件,它就可以正常工作。这就是为什么我猜测从列表转换为 numpy 数组后会出现问题的原因。

谢谢!

最佳答案

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

关于Python:将numpy数组(int)写入二进制文件而不进行填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39854637/

相关文章:

python - 将数组行从逗号拆分为列

python - 是否有像 Django 信号一样提供 'signals'(事件)功能的通用 Python 库?

python - PIL 在特定点放大图像

python - 在多进程中处理异常

python - 检查单个元素是否包含在 Numpy 数组中

python - 用参数最小化功能

Python mysql.connector.errors。 %s 传递给带引号的 SQL 查询

python - 如何在python中获得证据权重(WOE)和信息值(value)(IV)?

Python 多线程,用于消息传递和避免处理器占用的队列

python - 为什么python内置的sum(),max(),min()等函数可以用来计算numpy数据类型的ndarray?