我正在尝试读取包含一个格式为little endian的变量的二进制文件(float32)。
这个二进制文件应该给出一个带有尺寸的三维变量(8,480,1440)。 据说在另一个文件中没有标题。
经过努力阅读二进制文件并尝试在此处看到的不同解决方案后,我终于能够运行我的脚本了。但是输出并不像预期的那样(点数分布错误),这让我觉得在某些方面出了问题,虽然我不知道在哪里。
以下是运行但未给出预期结果的代码的最小示例:
filename=["CMORPH_3HLY_19980102"]
with open(filename[0], mode='rb') as file:
fileContent = file.read()
data=struct.unpack("f" * (len(fileContent) // 4), fileContent)
nvar = 1
ntim = 8
nlat = 480
mlon = 1440
data_ok=np.array(data)
cmorph=data_ok.reshape((mlon,nlat,nvar*ntim)).transpose()
我猜问题来自于struct.unpack中的内容,但由于我对二进制格式和二进制文件不太熟悉,所以我不知道如何解决这个问题。 任何帮助和/或解释将不胜感激!
答案 0 :(得分:0)
感谢stovfl,我解决了这个问题。以下是结合np.fromfile
和reshape
。
cmorph = np.fromfile(file,type=np.float32,count=nvar*ntim*nlat*mlon)).reshape((nvar*ntim,nlat,mlon))