PYTHON:如何正确处理np.fromfile(二进制格式)后的数据类型?

时间:2015-08-04 02:13:43

标签: python numpy

从包含np.fromfilenp.memmap的任何二进制文件读取后,我的指定数据类型存在各种问题。

我正在阅读以下内容:

openfile = open(mypath,'rb')
openfile.seek(start_byte)
myvalue = np.fromfile(openfile, dtype = np.uint64, count=1)

print myvalue

返回:

myvalue = [1234]

myvalue有8个字节并被解释为ndarray,但我想要一个uint64值,将其用作索引。

1)如何防止np.fromfile写入ndarray?

如果我正在尝试:myvalue = myvalue[0] myvalue完全丢失了它的数据类型。

2)当我访问第一个

时,为什么myvalue会丢失它的数据类型

我必须用我的数组做类似的事情:

data.extend([myvalue for l in range(myvalue)])

尝试再次分配数据类型:myvalue = myvalue[0].astype(np.uint64)。现在我明白了:

self.data_array[count:count+myvalue,0] = data[count:count+myvalue]   
TypeError: slice indices must be integers or None or have an __index__ method

3)这里出了什么问题?

如果我将myvalue分配为:myvalue = myvalue[0].astype(np.int32)数据被错误地解释,我得到:-35566848567等。

4)为什么自从读入后程序仍然错误地解释了myvalue myvalue = myvalue[0].astype(np.int32)
不是 myvalue = myvalue[0].astype(np.uint64)

2 个答案:

答案 0 :(得分:0)

原谅可能的非答案,但以这种方式发布代码更容易......

为什么你认为myvalue丢失了它的类型信息?我在这里尝试它时不会这样做(Python 2.7):

>>> myvalue = np.array([1234], np.uint64)
>>> myvalue = myvalue[0]
>>> type(myvalue)
<type 'numpy.uint64'>

答案 1 :(得分:0)

有关于在其文档中使用fromfile的警告:

  

注   -----不要依赖tofilefromfile的组合进行数据存储,因为生成的二进制文件不是平台   独立。特别是,没有字节顺序或数据类型信息   保存。数据可以以独立于平台的.npy格式存储   使用saveload代替。