python-3.x - 当将相同的数组写入此文件时,从 .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 方法?
解决方案
在您的情况下,这与文件的写入方式有关,而不是与文件的读取方式有关。
尝试:
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]])
为了解决这个问题,我建议在您的文件中添加一个包含相关信息的标题,或者使用不同的方法进行保存。
推荐阅读
- python - 问:ModuleNotFoundError:没有名为“matplotlib.pyplot”的模块等
- objective-c - 如何将带有非托管引用的 Swift 代码移植到 Objective-C
- enums - GRAPH API 无法过滤枚举
- laravel - 如何在电子邮件 Laravel 中有表单?
- javascript - 单击背景 div 时关闭 div
- php - 将 MySQL 表的插入限制为 N 行
- java - Spring Web Flow 是否有任何基于注释的版本?
- c# - 当我尝试使用设计师的表单类变量时,为什么会出错?
- sql - 循环一个表,选择另一个表并使用 SQL/VBA 更新第一个表的值
- php - 如何用小写标签搜索结果的链接替换标签?