Python 无法在NumPy中指定结构化数据类型
我必须读取以下二进制文件:Python 无法在NumPy中指定结构化数据类型,python,numpy,Python,Numpy,我必须读取以下二进制文件: fname = '3B42RT.2014082603.7.bin' with open(fname, 'rb') as fi: dt = np.dtype([('>b1',2880),('>i2',(480,1440)),('>i2',(480,1440)),('>b1',(480,1440)),('>i2',(480,1440))]) data = np.fromfile(fi, dtype=dt) 但是,我获得了以下错误
fname = '3B42RT.2014082603.7.bin'
with open(fname, 'rb') as fi:
dt = np.dtype([('>b1',2880),('>i2',(480,1440)),('>i2',(480,1440)),('>b1',(480,1440)),('>i2',(480,1440))])
data = np.fromfile(fi, dtype=dt)
但是,我获得了以下错误消息:
TypeError: data type not understood
我已将基于以下IDL程序的“dt”放入正确读取数据的程序中:
file = "3B42RT.2014082603.7.bin"
data = {header: bytarr(2880.0), precip: intarr(1440.0,480.0), precip_error: intarr(1440.0,480.0), $
source_of_estimate: bytarr(1440.0,480.0), precip_uncal: intarr(1440.0,480.0)}
close, 1
openr, 1, file
readu, 1, data
close, 1
precip = swap_endian(data.precip)
print, precip
我想使用Python正确读取该文件。
我认为我的代码中的问题在于在NumPy中定义结构化数据类型。我想知道是否有人熟悉这种问题。我阅读了下面的NumPy文档,但是由于我对Python知之甚少,我无法理解它。
NumPy数据类型中每个元组的第一个元素必须是字段名。试试这个:
np.dtype([
('field1', '>b1',2880),
('field2', '>i2',(480,1440)),
('field3', '>i2',(480,1440)),
('field4', '>b1',(480,1440)),
('field5', '>i2',(480,1440)),
])
如果数据文件是必需的,它在这里:谢谢,我一定会+1得到15分。顺便说一句,我可以把它放在字典的形式,这样就可以很容易地访问fieldname吗?一旦您使用这样的数据类型进行读取,您将得到一个“结构化数组”(以前称为recarray)。这已经命名了字段,因此您可以执行
data['field2'][34][100]
等操作。与IDL相比,'>b1'、'>i2'、'>i2'、'>b1'和'>i2'仍然存在问题,对吗?这是什么问题?如果与此问题有所不同,您可能需要发布一个新问题。因为数据['field2']的输出与IDL的输出不同。