Numpy: np.memmap详细用法

文章目录

  • 0. 引言
  • 1. 基本用法
  • 2. 参数说明
  • 3. 例子
    • 3.1 读取内存映射文件
    • 3.2 修改内存映射文件
  • 4. 使用场景
  • 5. 注意事项


0. 引言

np.memmap 是 NumPy 提供的一种用于内存映射大文件的类,允许大文件不完全加载到内存中,而是通过内存映射的方式部分加载。这在处理无法完全放入内存的大型数据集时非常有用。以下是 np.memmap 的基本用法及其详细说明。

1. 基本用法

官方介绍,看这里

class numpy.memmap(filename, dtype=<class 'numpy.ubyte'>, mode='r+', offset=0, shape=None, order='C')[source]

2. 参数说明

  • filename:文件的名称或路径。
  • dtype:数据类型(如 float32int64 等)。
  • mode:文件打开模式,常见模式包括:
    • 'r':只读模式。
    • 'r+':读写模式。
    • 'w+':读写模式,文件存在则覆盖,不存在则创建。
    • 'c':只读模式,文件存在则打开,不存在则创建(仅写入内存,不写入磁盘)。
  • shape:数据的形状。
  • offset:文件开始处的偏移量。
  • order:数组的存储顺序,'C' 表示行优先(C 风格),'F' 表示列优先(Fortran 风格)。

3. 例子

3.1 读取内存映射文件

通过以下步骤创建一个 memmap 对象:

  1. 导入 NumPy 库
import numpy as np
  1. 创建或打开一个内存映射文件
# 创建一个内存映射文件
filename = 'memmap_file.dat'
shape = (1000, 1000)  # 文件的形状
dtype = 'float32'  # 数据类型

# 创建一个 memmap 对象
data = np.memmap(filename, dtype=dtype, mode='w+', shape=shape)

# 现在可以像操作普通 NumPy 数组一样操作 memmap 对象
data[:10, :10] = np.random.rand(10, 10)

# 确保将数据写入磁盘
data.flush()

创建好 memmap 对象后,可以将其视为一个普通的 NumPy 数组进行读取和操作。

# 读取内存映射文件
data = np.memmap(filename, dtype='float32', mode='r', shape=shape)

# 访问数据
print(data[:10, :10])

3.2 修改内存映射文件

在读写模式下,可以对 memmap 对象的数据进行修改。

# 打开文件进行读写
data = np.memmap(filename, dtype='float32', mode='r+', shape=shape)

# 修改数据
data[0, 0] = 999.99

# 确保将修改写入磁盘
data.flush()

4. 使用场景

(1) 处理大数据集:当数据集非常大,无法完全加载到内存中时,可以使用 np.memmap 来处理部分数据。
(2)持久化数据:数据处理结果可以直接保存到磁盘,以便后续读取和分析。
(3)共享内存:不同进程间可以通过内存映射文件共享数据。

5. 注意事项

(1)性能:由于涉及磁盘操作,内存映射的访问速度通常比纯内存操作要慢。应尽量减少随机访问,尽量按顺序读取数据。
(2) 一致性:确保在多进程环境下对内存映射文件的操作是安全的,防止数据竞争。
(3) 文件大小:确保文件系统支持创建和操作大文件。


欢迎关注本人,我是喜欢搞事的程序猿; 一起进步,一起学习;

欢迎关注知乎/CSDN:SmallerFL

也欢迎关注我的wx公众号(精选高质量文章):一个比特定乾坤
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/729070.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

还原试卷的软件叫什么?这3款一键还原

还原试卷的软件叫什么&#xff1f;在数字化学习日益普及的今天&#xff0c;学生们在处理试卷时经常面临一个问题&#xff1a;如何高效地将已作答的试卷还原成空白状态以便重复练习&#xff1f;为了解决这一问题&#xff0c;市场上涌现出了多款还原试卷的软件。下面&#xff0c;…

职工管理系统

需求分析 系统需要能够实现对职工信息的插入、删除、查找、修改和排序功能。职工信息包括职工编号、姓名、性别、出生年月、参加工作年月、学历、职务、住址、电话等信息。界面友好&#xff0c;通过菜单实现以上功能&#xff0c;操作简单&#xff0c;能够方便快捷地进行信息管理…

RAG实操教程langchain+Milvus向量数据库创建你的本地知识库 二

Miluvs 向量数据库 关于 Milvui 可以参考我的前两篇文章 • 一篇文章带你学会向量数据库Milvus&#xff08;一&#xff09;[1]• 一篇文章带你学会向量数据库Milvus&#xff08;二&#xff09;[2] 下面我们安装 pymilvus 库 pip install --upgrade --quiet pymilvus如果你…

【自撰写】【国际象棋入门】第7课 常见战术分析(二)牵制、驱赶和腾挪

第7课 常见战术分析&#xff08;二&#xff09;牵制、驱赶和腾挪 在《第6课&#xff1a;常见战术分析&#xff08;一&#xff09;吃双和抽将》中&#xff0c;我们通过一系列实际棋局的例子&#xff0c;简单介绍了“吃双”和“抽将”这两种十分常见的战术。本次课中&#xff0c…

Apache DolphinScheduler 亚马逊云科技联合Meetup: 基于云上的最佳实践

引言 随着大数据和云计算技术的快速发展&#xff0c;企业在数据管理和任务调度上面临着前所未有的挑战&#xff0c;包括复杂的配置过程、性能优化和成本管理等问题。同时&#xff0c;确保数据在传输和存储过程中的安全性&#xff0c;并满足合规性要求&#xff0c;也是一个重要…

12通道温振信号采集卡

12 通道智能数据采集器&#xff0c;以下简称 SG-Vib-S12。 SG-Vib-S12 旨在帮助用户对工业生产中的设备健康状况进行监测与诊断&#xff0c; 降低因设备故障对生产过程产生的影响。SG-Vib-S12 输入同时兼容 IEP、ICP 两 线制、三线制&#xff08;振温一体&#xff09;传感器&…

QT4-QT5升级(4)GBK-UTF-8-乱码-QT工程构建的区别

文件编码为UTF-8 QString 正常 char* 中文乱码解决方法&#xff1a; #include <iostream> #include <QString> #include <QTextCodec>int main() {QString qstr "你好&#xff0c;世界&#xff01;"; // 中文字符串// 获取 GBK 编码的 QTex…

数据链路层【Linux网络复习版】

目录 一、数据链路层主要解决的是什么问题&#xff1f; 二、什么是以太网&#xff1f; 三、什么是MAC地址&#xff1f; 四、以太网帧的格式是什么&#xff1f; 五、 什么是MTU&#xff1f; 六、MTU和分片 MTU对IP协议的影响&#xff1f; 如何分片&#xff1f; 如何组装&a…

应用篇| 深入浅出LLM应用之RAG

相信很多人都使用过LLM大模型&#xff0c;但是现有大模型或多或少都有以下问题&#xff1a; LLM幻觉问题&#xff1a;从《【小白入门篇1】GPT到底是怎样练成&#xff1f;》我们知道虽然大模型现在能力很强,但是本质就是在做文字接龙,而且每次接龙都具有随机性, 导致模型有时候…

追求零缺陷?找六西格玛培训公司,轻松搞定!

在瞬息万变的商业环境中&#xff0c;企业面临着巨大的挑战和激烈的竞争。为了保持领先地位&#xff0c;企业必须不断寻求优化流程、提高效率、提升质量&#xff0c;并降低成本和风险。在这样的背景下&#xff0c;六西格玛培训公司应运而生&#xff0c;成为企业追求卓越、实现持…

LearnOpenGL - Android OpenGL ES 3.0 绘制纹理

系列文章目录 LearnOpenGL 笔记 - 入门 01 OpenGLLearnOpenGL 笔记 - 入门 02 创建窗口LearnOpenGL 笔记 - 入门 03 你好&#xff0c;窗口LearnOpenGL 笔记 - 入门 04 你好&#xff0c;三角形OpenGL - 如何理解 VAO 与 VBO 之间的关系LearnOpenGL - Android OpenGL ES 3.0 绘制…

ATA-4051C高压功率放大器在压电电机中的作用是什么

压电电机是一种特殊的电机&#xff0c;其工作原理基于压电效应&#xff0c;这是一种将电能转化为机械振动的现象。压电电机通常用于精密定位、振动控制和声波生成等应用。为了驱动和控制压电电机&#xff0c;需要高压功率放大器。下面将介绍高压功率放大器在压电电机中的作用&a…

外贸SEO工具有哪些推荐?

"我们作为一个专业的Google SEO团队&#xff0c;比较推荐一下几个适合外贸SEO的工具。Ahrefs 是一个非常强大的工具&#xff0c;可以帮助你深入分析竞争对手的表现&#xff0c;找到有潜力的关键词&#xff0c;还可以监控你的网站链接状况。另外&#xff0c;SEMrush 也很不…

ubuntu访问windows共享文件夹

方法: Ubuntu访问Windows共享文件夹的方法-CSDN博客 基于交换机的PC端网络通信_服务器交换机pc端-CSDN博客 补充说明&#xff1a; 在这里面输入&#xff1a; smb://192.168.0.30/WindowsShareToLinux

NGINX_二十 nginx 监控

二十 nginx 监控 1 nginx的基础监控 进程监控端口监控 注意&#xff1a; 这两个是必须要加在zabbix监控&#xff0c;加触发器有问题及时告警。 web 服务器 nginx 以其高性能与抗并发能力越来越多的被用户使用 作为一款服务器产品&#xff0c;其运行状态是运维密切关注的&a…

解决IDEA使用卡顿的问题,设置JVM内存大小和清理缓存

解决IntelliJ IDEA中卡顿问题&#xff0c;可以尝试以下几个常见且有效的步骤&#xff1a; 1 增加IDEA的JVM内存分配&#xff1a; 位于IDEA安装目录的bin文件夹下&#xff0c;找到对应的操作系统配置文件&#xff08;idea64.exe.vmoptions&#xff08;Windows&#xff09;或id…

数学建模理论学习:线性规划模型

三要素&#xff1a;目标函数、约束条件&#xff08;s.t.&#xff09;、决策变量&#xff08;x&#xff09; 目标函数&#xff1a;z ax1 bx2 cx3 ... 其中c为一个序列&#xff0c;从左到右依次从x1到xn的系数 解决下面的线性规划问题&#xff1a; % 目标函数系数&#xf…

信息打点web篇----web后端源码专项收集

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 专栏描述&#xff1a;因为第一遍过信息收集的时候&#xff0c;没怎么把收集做回事 导致后来在实战中&#xff0c;遭遇资产获取少&#xff0c;可渗透点少的痛苦&#xff0c;如今决定 从头来过&#xff0c;全面全方位…

AI创作在论文写作中扮演什么角色?

近年来&#xff0c;随着科技的快速发展&#xff0c;AI已经逐渐渗透到了生活中的方方面面&#xff0c;其中也包含着学术领域。 作为学生党&#xff0c;你是否还在为期末论文&#xff0c;大学生实践报告而发愁&#xff1f; 有了这些AI写作神器&#xff0c;大学生们再也不用在期…

实验一:Ubuntu系统中的USB设备绑定实验

实验一&#xff1a;Ubuntu系统中的USB设备绑定实验 一、实验目的二、实验原理三、实验环境四、实验步骤任务 1&#xff1a;绑定不同USB设备任务 2&#xff1a;绑定多个相同设ID的串口设备 五、注意事项六、拓展练习 一、实验目的 学习Ubuntu中USB设备命名方法&#xff1b;掌握…