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

时间:2014-04-01 03:52:48

标签: python arrays numpy

我刚刚开始使用numpy并且想知道一些事情。 分裂后我有一个看起来像这样的numpy数组:

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

我想使用numpy.savez将主数组保存到.npz存档中,每个子数组都放在自己的.npy文件中。

我想用这个:

numpy.savez('dataFile', mainArray)

可以工作,但它只使用名为arr_0.npy的单个.npy文件创建存档。

有没有办法做这样的事情?如果是这样,我可以使用任何数组的子阵列与该方法。为了获得这些数组,我从一个.bin文件中读取,该文件可能包含任意数量的元素,这些元素将分成任意数量的数组。这就是我遇到困难的原因。

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

2 个答案:

答案 0 :(得分:5)

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

我将代码更改为

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

这给了我正在寻找的解决方案。谢谢你的帮助。

答案 1 :(得分: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']