将二进制文件读入2D数组python

时间:2015-03-31 23:41:08

标签: python numpy

我无法在python中读取二进制文件并绘制它。它应该是一个未格式化的二进制文件,代表一个1000x1000的整数数组。我用过:

image = open("file.dat", "r")
a = np.fromfile(image, dtype=np.uint32)

打印长度返回500000.我无法弄清楚如何从中创建2D数组。

1 个答案:

答案 0 :(得分:2)

因为你使用

获得了50万uint32
a = np.fromfile(image, dtype=np.uint32) 

然后你将使用

获得一百万uint16
a = np.fromfile(image, dtype=np.uint16) 

然而,还有其他可能性。 dtype可以是任何16位整数dtype,例如

  • >i2(big-endian 16位signed int)或
  • <i2(little-endian 16-bit signed int)或
  • <u2(little-endian 16-bit unsigned int)或
  • >u2(big-endian 16-bit unsigned int)。

np.uint16<u2>u2相同,具体取决于您机器的字节顺序。


例如,

import numpy as np
arr = np.random.randint(np.iinfo(np.uint16).max, size=(1000,1000)).astype(np.uint16)
arr.tofile('/tmp/test')
arr2 = np.fromfile('/tmp/test', dtype=np.uint32)
print(arr2.shape)
# (500000,)

arr3 = np.fromfile('/tmp/test', dtype=np.uint16)
print(arr3.shape)
# (1000000,)

然后要获得一个形状数组(1000,1000),请使用reshape:

arr = arr.reshape(1000, 1000)