2015-03-31 139 views
0

我在閱讀python中的二進制文件並繪製它時遇到了問題。它應該是一個代表1000x1000整數數組的無格式二進制文件。我已經使用:將二進制文件讀入二維數組python

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

打印的長度返回500000.我想不出如何創建一個二維數組。

+0

如果是二進制的,你應該用'RB打開' – 2015-03-31 23:42:11

回答

2

由於您使用

a = np.fromfile(image, dtype=np.uint32) 

,那麼你將使用

a = np.fromfile(image, dtype=np.uint16) 

還有其他的可能性得到一百萬uint16 S,然而得到一百萬uint32同父異母。在D型可以是任何一個16位整數D型如

  • >i2(big-endian的16位有符號整數),或
  • <i2(little-endian的16位有符號整數),或
  • <u2(小端16位無符號整數)或
  • >u2(big-endian 16位無符號整數)。

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),使用重塑的數組:

arr = arr.reshape(1000, 1000)