numpy.load#

numpy.load(file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII', *, max_header_size=10000)[源代码]#

.npy.npz 或 pickle 文件加载数组或 pickled 对象。

警告

加载包含对象数组的文件会使用 pickle 模块,这对于错误或恶意构造的数据不安全。对于已知不包含对象数组的数据,请考虑传递 allow_pickle=False 以更安全地处理不受信任的来源。

参数:
file类文件对象、字符串或 pathlib.Path

要读取的文件。类文件对象必须支持 seek()read() 方法,并且必须始终以二进制模式打开。Pickle 文件还要求类文件对象支持 readline() 方法。

mmap_mode{None, ‘r+’, ‘r’, ‘w+’, ‘c’}, 可选

如果不是 None,则使用给定模式内存映射文件(有关模式的详细说明,请参见 numpy.memmap)。内存映射数组保留在磁盘上。然而,它可以像任何 ndarray 一样被访问和切片。内存映射对于访问大文件的小片段而无需将整个文件读入内存的情况特别有用。

allow_picklebool, 可选

允许加载存储在 npy 文件中的 pickled 对象数组。禁止 pickle 的原因包括安全性,因为加载 pickled 数据可以执行任意代码。如果禁止 pickle,则加载对象数组将失败。默认值:False

fix_importsbool, 可选

仅在加载 Python 2 生成的 pickle 文件时有用,这包括包含对象数组的 npy/npz 文件。如果 fix_imports 为 True,pickle 将尝试将旧的 Python 2 名称映射到 Python 3 中使用的新名称。

encodingstr, 可选

读取 Python 2 字符串时使用的编码。仅在加载 Python 2 生成的 pickle 文件时有用,这包括包含对象数组的 npy/npz 文件。不允许使用除 'latin1'、'ASCII' 和 'bytes' 以外的值,因为它们可能会损坏数值数据。默认值:'ASCII'

max_header_sizeint, 可选

允许的最大头文件大小。大型头文件可能不安全,因此需要明确传递一个更大的值。详见 ast.literal_eval。当传递 allow_pickle 时,此选项将被忽略。在这种情况下,文件默认被信任,该限制是不必要的。

返回:
resultarray, tuple, dict, etc.

文件中存储的数据。对于 .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])