numpy.savez 和 numpy.savez_compressed 使用 pickle 吗?

问题描述 投票:0回答:1

我最近遇到了 numpy.savez 和 numpy.savez_compressed。两者似乎都适用于不同类型的数组,包括对象数组。但是,numpy.load 不适用于对象类型数组。例如:

import numpy as np

numbers = np.full((10, 1), np.pi)
strings = np.full((10, 1), "letters", dtype=object)

np.savez("test.npz", numbers=numbers, strings=strings)

data = np.load("test.npz")

调用

data["strings"]
会抛出以下 ValueError:

ValueError: Object arrays cannot be loaded when allow_pickle=False

但是,在

numpy.load
上启用 pickle 可以解决此问题。
numpy.savez
numpy.savez_compressed
文档中没有讨论Pickling...这让我想知道为什么需要pickle来加载数据。
numpy.savez
numpy.savez_compressed
在幕后自动使用 pickle 吗?

python numpy pickle
1个回答
0
投票

一般情况下,会使用pickle模块。

在下面的源链接中查找“加载包含对象数组的文件使用

pickle
模块”。

https://github.com/numpy/numpy/blob/v1.26.0/numpy/lib/npyio.py#L555-L639

© www.soinside.com 2019 - 2024. All rights reserved.