[NumPy技巧]机器学习中使用numpy对数据集进行保存以集中管理

文章首发于若绾

摘要

在机器学习中，数据是至关重要的。因此，对于任何机器学习项目，对数据的管理和处理都是必不可少的。数据管理涉及到许多方面，包括数据的收集、清理、存储和处理。在这篇文章中，我们将讨论如何使用 NumPy 来保存数据集以供集中管理。

使用 NumPy 保存数据集

NumPy 是一种用于科学计算的 Python 库。它提供了一个强大的多维数组对象，以及一系列用于处理这些数组的函数。NumPy 数组可以存储不同类型的数据，包括数字、字符串和布尔值。因此，它们是存储数据集的理想选择。

保存单个数组

如果你的数据集中只有一个数组，我们可以使用 NumPy 的save函数。

numpy.save

函数变量：

file: file, str, or pathlib.Path

数据被保存到的文件或文件名。如果文件是一个文件对象，那么文件名将不会改变。如果文件是一个字符串或路径，如果文件名还没有扩展名，那么将在文件名上添加一个.npy扩展名。

arr: array_like

要保存的阵列数据。

allow_pickle: bool, optional

允许使用 Python pickles 来保存对象数组。不允许 pickle 的原因包括安全性 (加载 pickle 的数据可以执行任意代码) 和可移植性 (pickle 的对象可能无法在不同的 Python 安装上加载，例如，如果存储的对象需要的库不可用，而且不是所有 pickle 的数据都能在 Python 2 和 Python 3 之间兼容)。默认值： True

fix_imports: bool, optional

只有在强迫 Python 3 上对象数组中的对象以 Python 2 兼容的方式被 pickle 时才有用。如果 fix_imports 为 True，pickle 将尝试把新的 Python 3 名称映射到 Python 2 中使用的旧模块名称，这样 pickle 的数据流就可以用 Python 2 读取。

例如，假设我们有一个名为data的 NumPy 数组，我们可以使用以下代码将其保存到名为data.npy的文件中：

Copy
import numpy as np

data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.save('data.npy', data)

从文件中加载数组

要加载数据集，我们可以使用 NumPy 的load函数。例如，以下代码加载了名为data.npy的文件中保存的数组：

Copy
import numpy as np

data = np.load('data.npy')
print(data)

输出将是：

Copy
[[1 2 3]
[4 5 6]
[7 8 9]]

同时保存多个数组

如果你的数据集中具有多个数组，像 trani_set, train_label, test_set, test_label。可以使用 NumPy 的savez或者savez_compressed函数对数据集进行保存。**numpy.savez 将多个数组保存为未压缩的.npz 文件，而 numpy.savez_compressed 将数组保存为压缩的.npz** 文件，可以节省存储空间。

numpy.savez

函数变量：

file: str or file

文件名（str）或一个打开的文件（file-like object），数据将被保存在那里。如果文件是一个字符串或一个路径，如果文件名中没有.npz扩展名，将被附加到文件名中.

args: Arguments, optional

要保存到文件中的数组。请使用关键字参数（见下面的 kwds）来给数组指定名称。作为 args 指定的数组将被命名为 "arr_0"、"arr_1"，以此类推。

kwds: Keyword arguments, optional

要保存到文件的数组。每个数组将以其相应的关键字名称保存到输出文件中。

用kwds，数组将以关键字的名称保存。在这个例子中，我们创建了两个 NumPy 数组 array1 和 array2，然后使用 numpy.savez 将它们保存到名 arrays.npz** 的文件中。需要注意的是，我们需要为每个数组指定一个关键字参数，该参数将作为数组在文件中的名称。

Copy
import numpy as np

array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

# 保存数组到文件
np.savez('arrays.npz', arr1=array1, arr2=array2)

numpy.savez_compressed

函数变量：

file: str or file

文件名（str）或一个打开的文件（file-like object），数据将被保存在那里。如果文件是一个字符串或一个路径，如果文件名中没有.npz扩展名，将被附加到文件名中。

args: Arguments, optional

要保存到文件中的数组。请使用关键字参数（见下面的 kwds）来给数组指定名称。作为 args 指定的数组将被命名为 "arr_0"、"arr_1"，以此类推。

kwds: Keyword arguments, optional

要保存到文件的数组。每个数组将以其相应的关键字名称保存到输出文件中。

这个例子与上一个类似，但使用了 **numpy.savez_compressed 将数组保存为压缩的.npz** 文件。

Copy
import numpy as np

array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

# 保存数组到压缩文件
np.savez_compressed('compressed_arrays.npz', arr1=array1, arr2=array2)

从文件中加载数组

要从 **.npz 文件中加载数组，可以使用 numpy.load** 函数：

Copy
import numpy as np

# 加载保存的数组
loaded_arrays = np.load('arrays.npz')

# 通过在文件中指定的名称访问数组
loaded_array1 = loaded_arrays['arr1']
loaded_array2 = loaded_arrays['arr2']

在这个例子中，我们使用 **numpy.load 加载了名为 arrays.npz 的文件，并通过之前指定的名称访问其中的数组。同样的方法也适用于加载压缩的.npz** 文件。

小结

在本文中，我们讨论了如何使用 NumPy 来保存数据集以供集中管理。这是一个重要的数据管理方面，应该在任何机器学习项目中得到充分的重视。