跳转至

8.10.保存和加载

import numpy as np
import os
Linux 5.4.0-74-generic
Python 3.9.5 @ GCC 7.3.0
Latest build date 2021.06.18
numpy version:  1.20.3

保存为 npy 格式

np.save(file, arr, allow_pickle=True, fix_imports=True)

一个numpy数组储存为一个.npy格式的二进制文件。

  • file:文件名或者文件对象。如果是文件名且没有后缀,则会自动添加后缀.npy
  • arr:被存储的数组。
  • allow_pickle:布尔值,如果为True,则使用Python pickle。有时候为了安全性和可移植性而不使用pickle。
  • fix_imports:用于 Python 3 的数组导入到 Python 2 的情形。
x = np.arange(20).reshape(4, 5)
save_path = "array"
# 保存时会自动添加.npy后缀
np.save(save_path, x)
# npy文件被保存在当前工作目录
[i for i in  os.listdir() if i.endswith("npy")]
['array.npy']

保存为 npz 格式

np.savez(file, *args, **kwds)

多个numpy数组储存为一个.npz格式的二进制文件。

  • file:文件名或者文件对象。如果是文件名且没有后缀,则会自动添加后缀.npz
  • args:被存储的数组。这些数组的名字将被自动命名为arr_0/arr_1/...。如果没有名字,则完全无法知晓这些数组的区别。
  • kwds:将被存储的数组,这些关键字参数就是键的名字。

保存 .npz 文件

x = np.arange(20).reshape(4, 5)
save_path = "array"
np.savez(save_path, x, x)

np.savez_compressed(file, *args, **kwds)

将多个 NumPy 数组压缩储存为一个.npz格式的文件。

读入 .npy.npz 文件

np.load(file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII')

从二进制文件中读取数组,返回一个数组、元组或者字典(当二进制文件是savez生成时)。

  • file:存放数组的文件路径或者文件对象。
  • mmap_mode:如果不是None,则memory-map该文件。此时对数组的修改会同步到文件上。当读取大文件的一小部分时很有用,因为它不必一次读取整个文件。可选值为 None / 'r+' / 'r' / 'w+' / 'c'
  • allow_pickle:布尔值,如果为True,·则使用Python pickle。有时候为了安全性和可移植性而不使用pickle。
  • fix_imports:用于 Python 3 的数组导入到 Python 2 的情形。
  • encoding:只用于 Python 2,读取 Python 2 字符串。

读入 .npy 文件

np.load("array.npy", allow_pickle=True)
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])

读入 .npz 文件

np.load("array.npz", allow_pickle=True)
<numpy.lib.npyio.NpzFile at 0x7f4c44651eb0>

保存为文本文件

np.savetxt(fname, X, ...)

将一个 NumPy 数组储存为一个文本文件。

np.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline=' ', header='',
           footer='', comments='# ', encoding=None)

保存文本文件

x = np.arange(20).reshape(4, 5)
save_path = "array"
np.savetxt(save_path, x)

ndarray.tofile(fid, sep="", format="%s")

将数组保存为文本文件或二进制文件。

  • fid:一个 file 对象或者文件名。
  • sep:一个字符串,指定分隔符。如果为空或者空字符串,则按照二进制的方式写入,等价于file.write(a.tobytes())
  • format:一个字符串,指定了数值的格式化方式。

读入文本文件

np.loadtxt(fname, dtype, ...)

从文本文件加载 NumPy 数组。

np.loadtxt(fname, dtype=float, comments='#', delimiter=None,
           converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0,
           encoding='bytes', max_rows=None, like=None)

读入文本文件

np.loadtxt("array")
array([[ 0.,  1.,  2.,  3.,  4.],
       [ 5.,  6.,  7.,  8.,  9.],
       [10., 11., 12., 13., 14.],
       [15., 16., 17., 18., 19.]])