如何使用numpy.savez将带有子数组的数组保存为单独的.npy文件

4 投票
2 回答
7350 浏览
提问于 2025-04-18 00:47

我最近刚开始使用numpy,想了解一些事情。

我有一个numpy数组,分割后看起来是这样的:

[array([1,2,3]),
array([4,5,6])]

我想用numpy.savez把这个主数组保存到一个.npz的压缩文件里,并且每个子数组都放在自己的.npy文件中。

我以为用这个方法:

numpy.savez('dataFile', mainArray)

可以实现,但结果只创建了一个包含单个.npy文件的压缩文件,文件名是arr_0.npy。

有没有办法做到这一点?如果有的话,是否可以用这种方法处理任何数组和任意数量的子数组?我获取这些数组是从一个.bin文件中读取的,这个文件可能包含任意数量的元素,这些元素会分割成任意数量的数组。这就是我遇到困难的原因。

有没有办法向已经创建的.npz文件中添加文件?

2 个回答

1

如果你想把主数组里的子数组保存下来,那你可能需要手动使用 save,也就是说,你得自己去调用这个命令。

mainArray = [np.array([1,2,3]), np.array([4,5,6])]
for i in range(len(mainArray)):
    np.save('dataFile_%i'%i, mainArray[i] )

或者你可以使用 savez,这样可以把子数组单独保存,等需要的时候再加载它们。

mainArray = [np.array([1,2,3]), np.array([4,5,6])]
np.savez('dataFile', mainArray[0], mainArray[1])

npzfile = np.load('dataFile.npz')
npzfile['arr_0']
npzfile['arr_1']
5

经过更多的研究,我找到了我主要问题的答案。我发现可以使用 *arg 来遍历数组列表并将它们相加。

我把代码改成了

numpy.savez('test', *[mainArray[x] for x in rang(len(mainArray))])

这样我就找到了我想要的解决方案。谢谢你的帮助。

撰写回答