当前位置: 首页 > news >正文

NumPy 函数手册:文件读写

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

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

• NumPy 二进制格式(.npy)

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

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

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

(1)NumPy 二进制文件读写

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

(3)文本文件读写

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

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

NumPy 提供 .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_pickle=False)

参数说明:

• 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", a=a, b=b)

savez_compressed()

保存压缩 .npz 文件。

numpy.savez_compressed(file, *arrays, **kwds)

示例:

np.savez_compressed("arrays_compressed.npz", a=a, b=b)

说明:

该函数使用 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,6

loadtxt()

从文本文件读取数据。

numpy.loadtxt(fname, dtype=float, delimiter=None, skiprows=0, usecols=None)

参数说明:

• fname:文件名

• dtype:数据类型

• delimiter:字段分隔符

• skiprows:跳过的行数

• usecols:读取的列

示例 1:

data = 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", dtype=dtype)

输出结构:

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

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

genfromtxt()

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

numpy.genfromtxt(fname, delimiter=",", dtype=None)

特点:

• 支持缺失值

• 自动推断数据类型

• 支持字段名称

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

示例:

data = np.genfromtxt("data.csv", delimiter=",", names=True)

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

四、原始二进制文件读写

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

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

fromfile()

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

numpy.fromfile(file, dtype=float, count=-1, sep='')

参数说明:

• file:文件名或文件对象

• dtype:读取的数据类型

• count:读取元素数量

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

示例:

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)

输出:

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

“点赞有美意,赞赏是鼓励”

http://www.jsqmd.com/news/536325/

相关文章:

  • ChatGPT提示取消阻止实战:AI辅助开发中的高效调试技巧
  • ESP32开发调试
  • A59F扩音防啸叫模组-本地会议与扩音专属
  • 基于用户行为的Chatbot反馈学习:提升对话效率的实战指南
  • 数控机床机械手控制系统:可靠配置与高效运行要点
  • OpenClaw模型微调:优化GLM-4.7-Flash任务执行效果
  • 全国多地设备售后如何统筹?“售后管理系统”一键打通地域壁垒
  • 2026遵义玻璃隔断制造商官方电话公布,在贵州做玻璃隔断服务哪家靠谱? - 精选优质企业推荐榜
  • namespace
  • 西门子840D sl数控系统电源风扇单元(6SL3982-5CX10-0AA1)功能详解
  • 跨网段通讯神器|SG-NAT-210 工业 NAT 网关,不改设备一键通联
  • 《Linux 是怎样工作的》第 2 章:用户模式实现的功能
  • Mozilla开发者推出AI智能体知识共享平台cq解决编程效率问题
  • FONA SIM808嵌入式AT驱动库深度解析与工业实践
  • Vue + Java + Python 打造企业级 AI 知识库与任务分发系统(RAG架构全解析)
  • CubeCell蜂鸣器高精度PWM音调生成库CCTone
  • python之with和try
  • IT人员外包公司怎么选?5大服务商深度横评+隐性成本解析
  • 降AI率工具的语义重构技术解读:为什么能有效降论文AIGC率?
  • 《Linux 是怎样工作的》第 3 章 进程管理
  • 特权账号管理与运维安全审计核心技术
  • OpenClaw任务调度:GLM-4.7-Flash定时执行方案
  • 解决租房信息滞后的智能方案:Apartment Finder如何实时推送理想房源
  • 三线OS突破20个月!科伦博泰TROP2 ADC在肺癌红海杀出重围
  • Linux命令源码查看方法全解析
  • OpenClaw飞书机器人配置指南:Qwen3.5-9B实现对话式任务执行
  • TanStack功能介绍和使用场景,对应 vue,react 完整使用示例
  • 深圳龙岗企业周花哪个好
  • ChatTTS长文本处理实战:AI辅助开发中的性能优化与避坑指南
  • 基于vue的便利店管理销售系统[vue]-计算机毕业设计源码+LW文档