首页 > 解决方案 > 当将相同的数组写入此文件时,从 .bin 文件读取的 NumPy 数组的维度不同

问题描述

已将 2D numpy 数组写入 .bin 文件。现在,我想读回这个数组并将其打印回来。

这就是我进行实施的方式。

    import numpy as np
    mat = np.array([[18, 14, 20, 17],
                    [10, 16, 10, 12],
                    [15, 21, 13, 19]])

    with open(r"D:\PythonProgram\FileHandling\Array_bin.bin", 'wb') as filer:
        print(mat,"\n")
        filer.truncate()
        filer.write(mat)

    with open(r"D:\PythonProgram\FileHandling\Array_bin.bin", 'rb') as handler:
        handler.seek(0)
        print(handler.read())

    array_data = np.fromfile(r"D:\PythonProgram\FileHandling\Array_bin.bin",dtype = int)
    print("\n",array_data)

Output:
[[18 14 20 17]
[10 16 10 12]
[15 21 13 19]]

b'\x12\x00\x00\x00\x0e\x00\x00\x00\x14\x00\x00\x00\x11\x00\x00\x00\n\x00\x00\x00\x10\x00\x00\x00\n\x00\x00\x00\x0c\x00\x00\x00\x0f\x00\x00\x00\x15\x00\x00\x00\r\x00\x00\x00\x13\x00\x00\x00'

[18 14 20 17 10 16 10 12 15 21 13 19]

当我使用方法读取方法时,我明白为什么输出很奇怪,因为数据是每个 bin 文件,但是当np.fromfile我使用时,我实际上得到了数组元素,但是这次我的数组变平了。

那么,有没有办法在写入时以相同维度取回数组,但不使用 np.reshape 方法

标签: python-3.xnumpy

解决方案


在您的情况下,这与文件的写入方式有关,而不是与文件的读取方式有关。

尝试:

mat = np.array([18, 14, 20, 17, 10, 16, 10, 12, 15, 21, 13, 19])

然后逐字节读取文件,您会发现它与您使用的完全相同,

mat = np.array([[18, 14, 20, 17],
                [10, 16, 10, 12],
                [15, 21, 13, 19]])

为了解决这个问题,我建议在您的文件中添加一个包含相关信息的标题,或者使用不同的方法进行保存。


推荐阅读