NumPy 函数手册:文件读写
在数据分析、科学计算和机器学习中常常需要将数组数据保存到磁盘文件或从文件中读取数据。NumPy 提供了一组用于数组文件读写file I/O的函数用于在 NumPy 数组ndarray与外部文件之间进行数据转换。这些函数支持多种数据格式包括• NumPy 二进制格式.npy• 多数组压缩格式.npz• 文本格式.txt / .csv按照功能划分NumPy 的文件读写函数通常可以分为四类1NumPy 二进制文件读写2多数组压缩文件读写3文本文件读写4原始二进制文件读写一、NumPy 二进制文件读写.npyNumPy 提供 .npy 文件格式用于保存单个数组。这种格式可以完整保存数组形状shape数据类型dtype字节顺序endianness因此读取速度非常快并且可以精确恢复原数组结构。save()将数组保存为 .npy 文件。numpy.save(file, arr)参数说明• file文件名或文件对象• arr需要保存的数组示例import numpy as np a np.array([[1, 2, 3], [4, 5, 6]]) np.save(data.npy, a)保存后生成文件data.npy。load()从 .npy 文件读取数组。numpy.load(file, allow_pickleFalse)参数说明• file文件名或文件对象• allow_pickle是否允许加载 Python 对象。出于安全考虑NumPy 默认禁止加载 pickle 数据示例data np.load(data.npy)print(data)输出[[1 2 3] [4 5 6]]二、NumPy 多数组文件读写.npz当需要保存多个数组时可以使用 .npz 文件。.npz 文件本质上是一个 ZIP 压缩归档文件其中每个成员文件都是 .npy 格式的数组文件。1、保存 .npz 文件savez()保存多个数组到 .npz 文件。numpy.savez(file, *arrays, **kwds)参数说明• file输出文件名• arrays未命名数组• kwds带名称的数组示例a np.array([1, 2, 3])b np.array([4, 5, 6]) np.savez(arrays.npz, aa, bb)savez_compressed()保存压缩 .npz 文件。numpy.savez_compressed(file, *arrays, **kwds)示例np.savez_compressed(arrays_compressed.npz, aa, bb)说明该函数使用 ZIP 压缩来减少文件体积。2、读取 .npz 文件示例data np.load(arrays.npz) data[a]data[b]说明当读取 .npz 文件时numpy.load() 返回一个 numpy.lib.npyio.NpzFile 对象其行为类似只读字典可以通过键访问其中保存的数组。三、文本文件读写NumPy 也支持将数组保存为文本格式例如 .txt 或 .csv。savetxt()将数组写入文本文件。numpy.savetxt(fname, X, fmt%.18e, delimiter )参数说明• fname输出文件名• X输入数组• fmt数据格式• delimiter字段分隔符示例a np.array([[1, 2, 3], [4, 5, 6]]) np.savetxt(data.txt, a, delimiter,)输出文件内容1,2,34,5,6loadtxt()从文本文件读取数据。numpy.loadtxt(fname, dtypefloat, delimiterNone, skiprows0, usecolsNone)参数说明• fname文件名• dtype数据类型• delimiter字段分隔符• skiprows跳过的行数• usecols读取的列示例 1data np.loadtxt(data.txt, delimiter,)输出[[1. 2. 3.] [4. 5. 6.]]示例 2选择指定列data np.loadtxt(data.txt, delimiter,, usecols(0,2))输出[[1. 3.] [4. 6.]]当文本文件包含多列不同类型的数据时可以读取为结构化数组structured array。示例数据默认按空白字符分隔各列1 艾婉婷 852 岳璐珊 923 鞠子舟 78读取dtype [(id, int), (name, U10), (score, float)] data np.loadtxt(students.txt, dtypedtype)输出结构array([(1, 艾婉婷, 85.), (2, 岳璐珊, 92.), (3, 鞠子舟, 78.)], dtype[(id,i8), (name,U10), (score,f8)])说明每一列会映射为结构化数组中的一个字段。genfromtxt()genfromtxt() 是更通用的文本读取函数。numpy.genfromtxt(fname, delimiter,, dtypeNone)特点• 支持缺失值• 自动推断数据类型• 支持字段名称因此当文本数据格式不完全规整或包含缺失值时genfromtxt() 通常比 loadtxt() 更合适。示例data np.genfromtxt(data.csv, delimiter,, namesTrue)说明当 namesTrue 时第一行会作为字段名。四、原始二进制文件读写除了 .npy 与 .npz 格式外NumPy 还提供原始二进制文件读写函数。这种方式直接读写数组的二进制数据流不包含数组结构信息。因此在读取时通常需要手动指定数据类型dtype和形状shape。fromfile()从二进制文件读取数组数据。numpy.fromfile(file, dtypefloat, count-1, sep)参数说明• file文件名或文件对象• dtype读取的数据类型• count读取元素数量• sep字段分隔符。默认为空字符串表示按二进制方式读取若指定分隔符则按文本方式解析示例import numpy as np a np.array([1, 2, 3, 4], dtypenp.int32) a.tofile(data.bin) data np.fromfile(data.bin, dtypenp.int32) print(data)输出[1 2 3 4]tofile()将数组写入二进制文件。ndarray.tofile(file, sep, format%s)参数说明• file输出文件名• sep字段分隔符空字符串表示二进制写入• format输出格式示例a np.array([10, 20, 30, 40]) a.tofile(numbers.bin)说明该函数会将数组数据按原始字节序列写入文件。该函数通常与 fromfile() 配合使用但读取时需要手动提供正确的 dtype必要时还需自行恢复形状。 小结NumPy 提供了一组用于数组文件读写的函数体系。.npy 格式save、load用于高效存储单个数组.npz 格式savez、savez_compressed用于保存多个数组并支持压缩存储。文本读写函数savetxt、loadtxt、genfromtxt可用于与 CSV 或文本数据交换。此外fromfile 与 tofile 提供原始二进制数据读写能力。这些工具使数组数据能够在磁盘与内存之间高效转换是数据分析与科学计算中的基础工具。“点赞有美意赞赏是鼓励”