NumPy 函数手册:文件读写

在数据分析、科学计算和机器学习中,常常需要将数组数据保存到磁盘文件,或从文件中读取数据。NumPy 提供了一组用于数组文件读写(file I/O)的函数,用于在 NumPy 数组(ndarray)与外部文件之间进行数据转换。

这些函数支持多种数据格式,包括:

• NumPy 二进制格式(.npy)

• 多数组压缩格式(.npz)

• 文本格式(.txt / .csv)

按照功能划分,NumPy 的文件读写函数通常可以分为四类:

(1)NumPy 二进制文件读写

(2)多数组压缩文件读写

(3)文本文件读写

(4)原始二进制文件读写

一、NumPy 二进制文件读写(.npy)

NumPy 提供 .npy 文件格式,用于保存单个数组。

这种格式可以完整保存:

go 复制代码
数组形状(shape)数据类型(dtype)字节顺序(endianness)

因此读取速度非常快,并且可以精确恢复原数组结构。

save()

将数组保存为 .npy 文件。

cs 复制代码
numpy.save(file, arr)

参数说明:

• file:文件名或文件对象

• arr:需要保存的数组

示例:

javascript 复制代码
import numpy as np
a = np.array([[1, 2, 3],              [4, 5, 6]])
np.save("data.npy", a)

保存后生成文件:data.npy。

load()

从 .npy 文件读取数组。

cs 复制代码
numpy.load(file, allow_pickle=False)

参数说明:

• file:文件名或文件对象

• allow_pickle:是否允许加载 Python 对象。出于安全考虑,NumPy 默认禁止加载 pickle 数据

示例:

powershell 复制代码
data = np.load("data.npy")print(data)

输出:

css 复制代码
[[1 2 3] [4 5 6]]

二、NumPy 多数组文件读写(.npz)

当需要保存多个数组时,可以使用 .npz 文件。

.npz 文件本质上是一个 ZIP 压缩归档文件,其中每个成员文件都是 .npy 格式的数组文件。

1、保存 .npz 文件

savez()

保存多个数组到 .npz 文件。

cs 复制代码
numpy.savez(file, *arrays, **kwds)

参数说明:

• file:输出文件名

• arrays:未命名数组

• kwds:带名称的数组

示例:

apache 复制代码
a = np.array([1, 2, 3])b = np.array([4, 5, 6])
np.savez("arrays.npz", a=a, b=b)

savez_compressed()

保存压缩 .npz 文件。

cs 复制代码
numpy.savez_compressed(file, *arrays, **kwds)

示例:

javascript 复制代码
np.savez_compressed("arrays_compressed.npz", a=a, b=b)

说明:

该函数使用 ZIP 压缩来减少文件体积。

2、读取 .npz 文件

示例:

powershell 复制代码
data = np.load("arrays.npz")
data["a"]data["b"]

说明:

当读取 .npz 文件时,numpy.load() 返回一个 numpy.lib.npyio.NpzFile 对象,其行为类似只读字典,可以通过键访问其中保存的数组。

三、文本文件读写

NumPy 也支持将数组保存为文本格式,例如 .txt 或 .csv。

savetxt()

将数组写入文本文件。

bash 复制代码
numpy.savetxt(fname, X, fmt="%.18e", delimiter=" ")

参数说明:

• fname:输出文件名

• X:输入数组

• fmt:数据格式

• delimiter:字段分隔符

示例:

cs 复制代码
a = np.array([[1, 2, 3],              [4, 5, 6]])
np.savetxt("data.txt", a, delimiter=",")

输出文件内容:

apache 复制代码
1,2,34,5,6

loadtxt()

从文本文件读取数据。

python 复制代码
numpy.loadtxt(fname, dtype=float, delimiter=None,              skiprows=0, usecols=None)

参数说明:

• fname:文件名

• dtype:数据类型

• delimiter:字段分隔符

• skiprows:跳过的行数

• usecols:读取的列

示例 1:

ini 复制代码
data = np.loadtxt("data.txt", delimiter=",")

输出:

css 复制代码
[[1. 2. 3.] [4. 5. 6.]]

示例 2:选择指定列

ini 复制代码
data = np.loadtxt("data.txt",                  delimiter=",",                  usecols=(0,2))

输出:

css 复制代码
[[1. 3.] [4. 6.]]

当文本文件包含多列不同类型的数据时,可以读取为结构化数组(structured array)。

示例数据(默认按空白字符分隔各列):

apache 复制代码
1 艾婉婷 852 岳璐珊 923 鞠子舟 78

读取:

ini 复制代码
dtype = [("id", int), ("name", "U10"), ("score", float)]
data = np.loadtxt("students.txt", dtype=dtype)

输出结构:

php 复制代码
array([(1, '艾婉婷', 85.),       (2, '岳璐珊', 92.),       (3, '鞠子舟', 78.)],      dtype=[('id','<i8'), ('name','<U10'), ('score','<f8')])

说明:每一列会映射为结构化数组中的一个字段。

genfromtxt()

genfromtxt() 是更通用的文本读取函数。

python 复制代码
numpy.genfromtxt(fname, delimiter=",", dtype=None)

特点:

• 支持缺失值

• 自动推断数据类型

• 支持字段名称

因此,当文本数据格式不完全规整或包含缺失值时,genfromtxt() 通常比 loadtxt() 更合适。

示例:

ini 复制代码
data = np.genfromtxt("data.csv", delimiter=",", names=True)

说明:当 names=True 时,第一行会作为字段名。

四、原始二进制文件读写

除了 .npy 与 .npz 格式外,NumPy 还提供原始二进制文件读写函数。这种方式直接读写数组的二进制数据流,不包含数组结构信息。

因此在读取时通常需要手动指定数据类型(dtype)和形状(shape)。

fromfile()

从二进制文件读取数组数据。

cs 复制代码
numpy.fromfile(file, dtype=float, count=-1, sep='')

参数说明:

• file:文件名或文件对象

• dtype:读取的数据类型

• count:读取元素数量

• sep:字段分隔符。默认为空字符串("")表示按二进制方式读取;若指定分隔符,则按文本方式解析

示例:

apache 复制代码
import numpy as np
a = np.array([1, 2, 3, 4], dtype=np.int32)
a.tofile("data.bin")
data = np.fromfile("data.bin", dtype=np.int32)
print(data)

输出:

cs 复制代码
[1 2 3 4]

tofile()

将数组写入二进制文件。

perl 复制代码
ndarray.tofile(file, sep="", format="%s")

参数说明:

• file:输出文件名

• sep:字段分隔符(空字符串表示二进制写入)

• format:输出格式

示例:

apache 复制代码
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 提供原始二进制数据读写能力。这些工具使数组数据能够在磁盘与内存之间高效转换,是数据分析与科学计算中的基础工具。

"点赞有美意,赞赏是鼓励"

相关推荐
dinl_vin1 天前
Python 数据分析入门系列(一):从NumPy开始
python·数据分析·numpy
MediaTea2 天前
NumPy 函数手册:数组重复与扩展
numpy
sunxunyong4 天前
服务器运行CPU/内存保护
服务器·python·numpy
scx_link4 天前
numpy中有一个方法叫ndarray吗?还是ndarray指的numpy中的数值的类型?
numpy
jerryinwuhan6 天前
python数据挖掘基础
python·数据挖掘·numpy
SugarFreeOixi6 天前
MATLAB绘图风格记录NP类型
python·matlab·numpy
小陈工7 天前
FastAPI性能优化实战:从每秒100请求到1000的踩坑记录
python·性能优化·django·flask·numpy·pandas·fastapi
REDcker8 天前
CentOS 与主流 Linux 发行版历史与版本综述
linux·centos·numpy
百年੭ ᐕ)੭*⁾⁾8 天前
DataFrame存入mysql以及读取操作
数据库·mysql·numpy·pandas·ipython