Python-从二进制数据读取二维数组

标签 python arrays numpy binary endianness

我尝试使用 Python 从二进制文件中读取带有 float 的二维数组。文件已由 Fortran 程序以大端字节序写入(它是天气研究和预报模型的中间文件)。我已经知道要读取的数组的维度大小(nx 和 ny),但作为 Fortran 和 IDl 程序员,我完全迷失了,如何在 Python 中管理它。 (稍后我想可视化该数组)。

  1. 我应该使用 struct.unpacknumpy.fromfilearray 模块吗?
  2. 我是否必须先读取向量,然后再对其进行整形? (仅在 numpy-way 中见过此选项)
  3. 如何使用 numpy 定义二维数组以及如何定义以大端字节顺序读取的数据类型?
  4. 是否需要考虑数组排序(按列或行)的问题?

最佳答案

每个子问题的简短答案:

  1. 我认为 array 模块没有办法指定字节顺序。 在 struct 模块和 Numpy 之间我认为 Numpy 更容易 使用,特别是对于类似 Fortran 的有序数组。
  2. 就硬件(磁盘、 RAM 等)受到关注,所以是的 reshape 以获得 2D 表示 总是有必要的。使用 numpy.fromfile 必须进行 reshape 之后显式地进行,但是 numpy.memmap 提供了一种 reshape 的方法 更加含蓄。
  3. 使用 Numpy 指定字节顺序的最简单方法是使用短字符 type string ,实际上与 approach needed for the struct module 非常相似。在 Numpy >f>f4 中指定单个 精度和 >d>f8 double 大端浮点 点。
  4. 您的二进制文件可以沿着行(类似 C)或沿着 列(类似 Fortran)。无论两者中的哪一个,都必须考虑到这一点 帐户以正确表示数据。 Numpy 使这变得简单 reshapememmap(以及其他)的 order 关键字参数。

总而言之,代码可以是这样的:

import numpy as np

filename = 'somethingsomething'

with open(filename, 'rb') as f:
    nx, ny = ...  # parse; advance file-pointer to data segment
    data = np.fromfile(f, dtype='>f8', count=nx*ny)
    array = np.reshape(data, [nx, ny], order='F')

关于Python-从二进制数据读取二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32693337/

相关文章:

python - 跟踪视频 OpenCV 中的圆圈

python - 为什么 numpy.random.choice 不使用算术编码?

javascript - 无论javascript中的位置如何,数组的匹配值

arrays - 如何直接修改Julia库Flux中的权重值?

arrays - MATLAB 元胞数组到单个变量

具有空第二维的数组/向量的 Python/numpy 问题

python : No module named 'flask'

python - 填充 Django 数据库

python - 使用python计算大协方差矩阵

python - 绘制圆弧 : anomaly in the plot