如何将 NumPy 数组保存到文件以进行机器学习?2025 年 6 月 21 日 | 8 分钟阅读 在进行机器学习时,以适合您预期用途的方式存储NumPy数组有助于有效地管理数据、内存和处理速度。根据具体用例,存在多种保存数组的方法。您选择哪种方法将取决于您项目的上下文。如果您处理的是单个数组,并且希望在不丢失任何信息的情况下保持其形状、数据类型和结构,那么请使用.npy;它是最合适的格式。这是一种专门为NumPy设计的二进制格式,使其在保存和加载数据方面具有一定的速度优势。当您需要集体存储多个数组时,.npz格式非常有用。当您处理包含不同组件的数据集时,可以将多个数组保存在单个压缩文件中。 有时,纯文本或CSV可能是保存人类可读数组的更好格式。.csv格式具有以表格形式组织的数据,并且可以轻松地通过Excel或Pandas等工具使用。.txt格式在呈现方式上提供了自由度,允许使用不同的分隔符。此外,如果您需要可以在不同应用程序之间读取的数据,可以考虑.json格式。通过将NumPy数组转换为列表后保存为JSON,NumPy数组现在可以作为应用程序设置、模型参数或结构化数据集的传输媒介,这些数据格式易于机器和人类理解。根据具体用例,您打算做什么将决定使用哪种格式;.npy格式保存和加载速度快;.npz格式适合处理多个数组;如果您需要人类可读性,则应选择.csv、.txt或.json格式。这样,格式的选择将有助于您的机器学习管道保持高效,节省时间和计算能力,并使您保持在正轨上。 理解.npy格式.npy格式是保存NumPy数组时最常用的格式。它提供了一种可靠的方式来存储数据,保持其原有状态。它保留了数组的所有方面:形状、数据类型和结构——这些对于需要精确度的机器学习和建模任务都至关重要。.npy最大的优势之一是速度。由于它是一种二进制格式,与.csv和.txt等基于文本的格式相比,读写.npy相对更快。实际上,它的速度是它们的七倍,使其适用于处理大型数据集或保存需要多次重复使用的模型参数。.npy不易出现其他格式(如.csv或.txt)中可能出现的小错误,因为它保留了所有值,以二进制形式存储。 代码 输出 ![]() 使用np.save()函数可以将数组保存到NumPy的.npy格式。它接受两个参数:文件名和数组。该函数会自动处理数组结构的压缩和编码,以便使用np.load()高效地读取内容。.npy格式中使用的数据类型包括整数、浮点数和复数,因此适合许多数值运算。.npy格式在机器学习应用中很有用,可用于高效地预处理大型数据集、存储计算的中间结果以及/或保存已训练模型的权重,因为这种方法可以高效地重新创建数据,而无需重新进行耗时的计算或从原始来源进行繁琐的特征提取。 .npz格式这是.npy的一个扩展,它将多个NumPy数组存储在单个压缩文件中,保留其结构、形状和数据类型。这在需要存储所有数据并将其与特征或模型参数关联的机器学习应用程序中总是一个受欢迎的功能。考虑到.npy只存储一个数组,.npz提供了一个类似字典的结构,为每个数组分配一个唯一的键以便于检索。.npz支持压缩和未压缩存储。np.savez()将创建未压缩文件,而np.savez_compressed()应用基于gzip的压缩,确保文件大小更小,并且加载时间通常很快。 代码 输出 ![]() 使用np.savez()函数将NumPy数组以.npz格式存储,每个NumPy数组必须与一个不同的关键字参数相关联。因此,在重新打开文件使用np.load()时,可以通过分配的键单独检索已存储的数组。.npz格式在机器学习工作流中很有用,因为大量的数值数据,如训练和验证数据集、预处理的特征和模型权重,可以存储在一个文件中,便于传输和最终重用。它还可以防止在像.csv或.txt这样不那么理想的基于文本的存储方法中可能出现的_数据丢失或格式不一致问题,因为.npz保持了所存储数组的完整性。 .csv格式扩展名为.csv的文件是另一种常见格式,由于其人类可读性并且可以与其他数据处理工具一起使用,它被广泛用于表格数据的相互转换。Csv以纯文本格式而不是像.npy或.npz这样的密集二进制格式以人类可读的方式写入数据。.csv中保存的数据可以轻松地在Microsoft Excel、Google表格和Python的pandas等多种软件包中打开、共享和进行计算。这种文件格式在机器学习应用中非常方便,用于存储数据集、特征矩阵或模型预测,这些数据结构可以轻松地适应数据管道。 代码 输出 ![]() 为了将NumPy数组保存为.csv格式,通常的做法是将其转换为pandas DataFrame,然后调用.to_csv()并使用可选参数来执行诸如排除行索引、指定列名和设置分隔符之类的操作。或者,NumPy提供了np.savetxt()直接将数组写入.csv文件,同时仍然可以控制分隔符、格式精度和换行符。要将.csv文件读回NumPy数组,用户可以调用pandas.read_csv()或np.loadtxt(),具体取决于数据是带有标题还是混合数据类型保存的。 .txt格式.txt格式可以轻松灵活地以人类可读的格式存储NumPy数组。这在处理需要共享、查看或手动编辑的数据时尤其有用。二进制格式(.npy)或(.npz)高效且加载速度快,而.txt文件允许用户使用文本编辑器以纯文本形式轻松查看和编辑数据。这种存储模式非常适合数值数据集、日志或不包含高层格式要求的轻量级记录。 代码 输出 ![]() 长期以来,一直使用np.savetxt()函数将NumPy数组保存到.txt文件格式。这允许自定义分隔符(例如逗号、空格或制表符),允许固定浮点数的精度,并允许使用换行符分隔多维数组的不同级别。为了确保可读性并与其他电子表格和其他文本处理工具兼容,通常使用逗号或制表符等分隔符来分隔值来保存结构化数据。文本文件中还可以包含其他有用的数据,如列标题和注释,为存储的数据提供上下文。 借助np.loadtxt()函数,该函数可以有效地读取数值数据,同时提供处理缺失值、指定数据类型和修改分隔符设置的选项,可以将.txt文件读回NumPy数组。作为替代,对于包含标题、不同列类型和不规则格式的文件,可以使用np.genfromtxt()来处理更复杂的结构化数据。 .json格式JSON在许多编程环境中被广泛用于存储结构化数据。当处理机器学习配置、模型参数或数据集时,这种格式为保存NumPy数组提供了一个非常有用的选项。这些文件的优点在于它们以人类可读的形式存储数据,并且可以轻松地在各种应用程序中使用,范围从Web API、数据库到机器学习工作流。 NumPy添加了一个讽刺之处,即由于其二进制形式,直接保存数组到JSON是不可能的,但可以通过将数组转储为Python列表然后再进行序列化来解决此问题。保存到JSON文件的典型方法是使用json.dump(),而使用json.load()则用于读回Python字典。由于JSON不支持NumPy的原生数组类型,因此在保存和使用np.array重新加载之前,绝对应该使用.tolist()。这样,通过转换,将非JSON类型变量保存起来,以便与数值数据一起以结构化的形式存储,这使得它们可以直接被任何应用程序或机器学习模型使用。 代码 输出 ![]() JSON文件特别适用于保存键值对形式的结构化数据,其中数组可以存储在字典中。这使得检索标签和元数据的配置功能变得更加容易。相反,它不如二进制存储(无论是压缩的.npy还是.npz),JSON是完全人类可读的,并且可以使用任何文本编辑器进行编辑。从JSON加载大型数值数据集可能会比较慢,因为它是文本格式,不如二进制格式空间效率高,并且会增加一些解析开销。 下一主题机器学习中的数据泄露 |
我们请求您订阅我们的新闻通讯以获取最新更新。