【问题标题】:Loading the binary data to a NumPy array将二进制数据加载到 NumPy 数组
【发布时间】:2021-06-28 15:33:12
【问题描述】:

我无法读取二进制文件。我有一个 NumPy 数组,

data = array([[ 0.        ,  0.        ,  7.821725  ],
              [ 0.05050505,  0.        ,  7.6358337 ],
              [ 0.1010101 ,  0.        ,  7.453858  ],
              ...,
              [ 4.8989897 ,  5.        , 16.63227   ],
              [ 4.949495  ,  5.        , 16.88153   ],
              [ 5.        ,  5.        , 17.130795  ]], dtype=float32)

我将此数组写入二进制格式的文件。

file = open('model_binary', 'wb')
data.tofile(file)

现在,我无法从保存的二进制文件中取回数据。我尝试使用numpy.fromfile(),但对我没有用。

file = open('model_binary', 'rb')
data = np.fromfile(file)

当我打印数据时,我得到了[0.00000000e+00 2.19335211e-13 8.33400000e+04 ... 2.04800049e+03 2.04800050e+03 5.25260241e+07],这绝对不是我想要的。

我运行以下代码来检查文件中的内容,

for line in file:
    print(line)
    break

我得到了b'\x00\x00\x00\x00\......\c1\x07@\x00\x00\x00\x00S\xc5{@j\xfd\n' 的输出,我想它是二进制格式的。

我想从保存的二进制文件中取回数组。任何帮助将不胜感激。

【问题讨论】:

  • 你为什么不用np.save
  • @QuangHoang 实际上,我有一个非常大的文件,因此我希望以二进制格式保存它。
  • 使用data.tofilenp.fromfile时,只需指定文件名(或路径)作为参数。但我不确定为什么 python 文件对象不起作用。也许您在写入后没有关闭流?
  • 使用np.fromfile时也可以指定dtype=float32关键字。
  • @SurajS np.save 将文件保存到二进制文件.npy

标签: python python-3.x numpy binary numpy-ndarray


【解决方案1】:

正如 Kevin 所说,需要添加 dtype。您可能还需要重塑(您的示例中有 3 列。所以

file = open('model_binary', 'rb')
data = fromfile(file, dtype=np.float32).reshape((-1,3))

应该适合你。

顺便说一句,我认为np.save 确实保存为二进制格式,应该避免这些问题。

【讨论】:

  • 我认为dtype必须是np.float32
  • 你是对的 - 我是从问题中复制粘贴的。
猜你喜欢
  • 1970-01-01
  • 2014-01-27
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 2016-12-03
  • 2021-10-21
  • 1970-01-01
相关资源
最近更新 更多