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

Posted

技术标签:

【中文标题】如何使用 numpy.savez 将带有子数组的数组保存到单独的 .npy 文件中【英文标题】:How to use numpy.savez to save array with subarrays into separate .npy files 【发布时间】:2014-04-01 03:52:48 【问题描述】:

我最近才开始使用 numpy 并且想知道一些事情。 我有一个 numpy 数组,拆分后看起来像这样:

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

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

我想用这个:

numpy.savez('dataFile', mainArray)

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

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

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

【问题讨论】:

任何帮助都将不胜感激,甚至可以告诉我我的问题是否写得不好。 【参考方案1】:

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

我把代码改成

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

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

【讨论】:

我认为这相当于numpy.savez('test', *mainArray) “*”有什么作用?【参考方案2】:

如果您想将子数组保存在主数组中,那么您可能需要手动使用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']

【讨论】:

如果我手动使用保存,我可以将这些单独的文件放入单个 .npz 存档吗?

以上是关于如何使用 numpy.savez 将带有子数组的数组保存到单独的 .npy 文件中的主要内容,如果未能解决你的问题,请参考以下文章

为啥 numpy.savez() 输出不可重现的文件?

如何在 Python 中将对象数组保存到文件中

Numpy savez 异常

(原+译)使用numpy.savez保存字典后读取的问题

在磁盘上保留 numpy 数组的最佳方法

Numpy之数据保存与读取