如何将多维NumPy数组写入与struct.pack相同的磁盘?

时间:2016-05-03 17:40:56

标签: python arrays numpy

我有一个例程,迭代地将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方法相同的二进制格式?

1 个答案:

答案 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')