numpy.load#
- numpy.load(file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII', *, max_header_size=10000)[source]#
从
.npy
、.npz
或 pickle 文件中加载数组或 pickle 对象。警告
加载包含对象数组的文件会使用
pickle
模块,该模块对错误或恶意构造的数据不安全。考虑传递allow_pickle=False
来加载已知不包含对象数组的数据,以便更安全地处理不受信任的来源。- 参数:
- file类文件对象、字符串或 pathlib.Path
要读取的文件。类文件对象必须支持
seek()
和read()
方法,并且必须始终以二进制模式打开。Pickle 文件也要求类文件对象支持readline()
方法。- mmap_mode{None, ‘r+’, ‘r’, ‘w+’, ‘c’},可选
如果非 None,则使用给定的模式将文件内存映射(请参阅
numpy.memmap
以详细了解这些模式)。内存映射数组保存在磁盘上。但是,可以像任何 ndarray 一样访问和切片它。内存映射对于访问大型文件的较小片段特别有用,而无需将整个文件读入内存。- allow_pickle布尔值,可选
允许加载存储在 npy 文件中的 pickle 对象数组。不允许 pickle 的原因包括安全问题,因为加载 pickle 数据可以执行任意代码。如果禁止 pickle,则加载对象数组将失败。默认值:False
版本 1.16.3 中的更改: 为响应 CVE-2019-6446 将默认值更改为 False。
- fix_imports布尔值,可选
仅在 Python 3 上加载 Python 2 生成的 pickle 文件时有用,其中包括包含对象数组的 npy/npz 文件。如果 fix_imports 为 True,则 pickle 将尝试将旧的 Python 2 名称映射到 Python 3 中使用的新的名称。
- encoding字符串,可选
读取 Python 2 字符串时使用的编码。仅在 Python 3 中加载 Python 2 生成的 pickle 文件时有用,其中包括包含对象数组的 npy/npz 文件。不允许使用 ‘latin1’、‘ASCII’ 和 ‘bytes’ 以外的值,因为它们可能会损坏数值数据。默认值:‘ASCII’
- max_header_size整数,可选
允许的最大标头大小。大型标头可能无法安全加载,因此需要显式传递更大的值。有关详细信息,请参阅
ast.literal_eval
。传递 allow_pickle 时,此选项将被忽略。在这种情况下,文件按定义是受信任的,并且限制是不必要的。
- 返回值:
- result数组、元组、字典等
存储在文件中的数据。对于
.npz
文件,必须关闭返回的 NpzFile 类实例,以避免泄漏文件描述符。
- 引发:
- OSError
如果输入文件不存在或无法读取。
- UnpicklingError
如果
allow_pickle=True
,但文件无法作为 pickle 加载。- ValueError
文件包含对象数组,但给定
allow_pickle=False
。- EOFError
当在同一文件句柄上多次调用
np.load
时,如果所有数据都已读取
另请参阅
save
、savez
、savez_compressed
、loadtxt
memmap
创建到存储在磁盘上的文件中数组的内存映射。
lib.format.open_memmap
创建或加载内存映射的
.npy
文件。
备注
如果文件包含 pickle 数据,则返回 pickle 中存储的任何对象。
如果文件是
.npy
文件,则返回单个数组。如果文件是
.npz
文件,则返回类似字典的对象,其中包含{filename: array}
键值对,每个文件在归档文件中都有一个。如果文件是
.npz
文件,则返回的值以类似于 open 函数的方式支持上下文管理器协议with load('foo.npz') as data: a = data['a']
退出“with”块时,底层文件描述符将关闭。
示例
>>> import numpy as np
将数据存储到磁盘,然后再次加载
>>> np.save('/tmp/123', np.array([[1, 2, 3], [4, 5, 6]])) >>> np.load('/tmp/123.npy') array([[1, 2, 3], [4, 5, 6]])
将压缩数据存储到磁盘,然后再次加载
>>> a=np.array([[1, 2, 3], [4, 5, 6]]) >>> b=np.array([1, 2]) >>> np.savez('/tmp/123.npz', a=a, b=b) >>> data = np.load('/tmp/123.npz') >>> data['a'] array([[1, 2, 3], [4, 5, 6]]) >>> data['b'] array([1, 2]) >>> data.close()
内存映射存储的数组,然后直接从磁盘访问第二行
>>> X = np.load('/tmp/123.npy', mmap_mode='r') >>> X[1, :] memmap([4, 5, 6])