我有一个例程,迭代地将41x55 numpy数组附加到输出文件,如下所示:
fmt = 'ihhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh'
for x in range(0, 41):
vmdata_file.write(struct.pack(fmt, *building_vms[x,:]))
我试图通过调用ndarray.tofile方法来替换它,但无法获得完全相同的输出:
building_vms.tofile(vmdata_file)
我的理解是,只要数组中的基础数据类型相同,tofile方法就会写入与struct.pack方法相同的二进制数据。如何确保tofile方法写入与struct.pack方法相同的二进制格式?
答案 0 :(得分:0)
一种方法是首先在内存中构建数组,确切地说是如何将它放在磁盘上:
import numpy as np
firstcol = building_vms[:,0].astype('i').view('h').reshape(len(building_vms), -1)
tmp = np.hstack((firstcol , building_vms[:,1:].astype('h')))
tmp.tofile(vmdata_file)
可能有点hackish,但您可以使用.view('h').reshape(len(building_vms), -1)
代替.view('2h')
。