numpy.load#
- numpy.load(file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII', *, max_header_size=10000)[源代码]#
从
.npy
,.npz
或 pickle 文件中加载数组或 pickle 对象.警告
加载包含对象数组的文件使用
pickle
模块,该模块对错误或恶意构造的数据不安全.考虑传递allow_pickle=False
来加载已知不包含对象数组的数据,以便更安全地处理不受信任的来源.- 参数:
- file类文件对象、字符串或 pathlib.Path
要读取的文件.类文件对象必须支持
seek()
和read()
方法,并且必须始终以二进制模式打开.Pickled 文件还要求类文件对象支持readline()
方法.- mmap_mode{None, ‘r+’, ‘r’, ‘w+’, ‘c’}, 可选
如果不是 None,则使用给定的模式(参见
numpy.memmap
以获取模式的详细描述)对文件进行内存映射.内存映射数组保存在磁盘上.然而,它可以像任何 ndarray 一样被访问和切片.内存映射对于访问大文件的小片段而不将整个文件读入内存特别有用.- allow_picklebool, 可选
允许加载存储在 npy 文件中的序列化对象数组.不允许序列化的原因包括安全性,因为加载序列化数据可以执行任意代码.如果禁止序列化,加载对象数组将会失败.默认值:False
在 1.16.3 版本发生变更: 在响应 CVE-2019-6446 时,默认设置为 False.
- fix_importsbool, 可选
仅在Python 3上加载由Python 2生成的pickle文件时才有用,这包括包含对象数组的npy/npz文件.如果 fix_imports 为True,pickle将尝试将旧的Python 2名称映射到Python 3中使用的新名称.
- encodingstr, 可选
读取 Python 2 字符串时使用的编码.仅在 Python 3 中加载由 Python 2 生成的 pickle 文件时有用,这包括包含对象数组的 npy/npz 文件.不允许使用除 ‘latin1’、’ASCII’ 和 ‘bytes’ 以外的值,因为它们可能会损坏数值数据.默认值:’ASCII’
- max_header_sizeint, 可选
允许的最大头文件大小.较大的头文件可能无法安全加载,因此需要显式传递更大的值.详情请参见
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
文件,那么会返回一个类似字典的对象,包含{文件名: 数组}
键值对,每个文件在存档中对应一个.如果文件是一个
.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])