3

我一直在尝试在使用 pypy 时将 numpy 数组保存到文件的最佳方法(这意味着我不能使用明显numpy.savenumpy.savetxt等,因为它们不受支持)。我尝试过使用 Pickle 模块(与 pypy 一起使用),但 Pickle 只会让我保存数据列表。虽然我可以使用array.tolist(),但当远离一维 numpy 数组时,这会变得复杂。

我知道 Struct 模块可用于保存和加载 numpy 数组,但我不知道如何解决这个问题,而且网上的信息似乎很少。

任何有用的提示/教程都会非常有用!

4

1 回答 1

0

使用 struct,您可以轻松地将整个数据数组转储或读取到磁盘,但您必须弄清楚如何存储元数据,即写入的项目数、每个项目的大小、数组的形状......

比如说,你的数组总是由 uint32 组成。给定这样一个数组arr,您可以将其写为:

f = open(filename, 'wb')
f.write(struct.pack('I', arr.ndim))
f.write(struct.pack('I' * arr.ndim, *arr.shape))
size = reduce(lambda x, y: x*y, arr.shape)
f.write(struct.pack('I' * size, *arr.ravel()))

你可以把它读成

f = open(filename, 'rb')
ndim = struct.unpack('I', f.read(4))[0]
shape = tuple(struct.unpack('I' * ndim, f.read(4 * ndim)))
size = reduce(lambda x, y: x*y, shape)
arr = np.array(struct.unpack('I' * size, f.read(4 * size)).reshape(shape)

你可以想出一个更复杂的方案来编码数据类型,数据的字节序......

此外,如果它们在您的系统中工作,则使用numpy.fromfilenumpy.tofile来实际转储整个数组非常方便。

于 2012-12-11T01:45:01.833 回答