Numpy: np.memmap详细用法

news2025/4/14 10:49:04

文章目录

  • 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公众号(精选高质量文章):一个比特定乾坤
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 Llama 3 开源和 Elastic 构建 RAG

作者&#xff1a;Rishikesh Radhakrishnan 使用开源的 Llama 3 和 Elastic 构建 RAG Llama 3 是 Meta 最近推出的开源大型语言模型。这是 Llama 2 的后继者&#xff0c;根据已发布的指标&#xff0c;这是一个重大改进。与 Gemma 7B Instruct、Mistral 7B Instruct 等最近发布的…

用于快速充电站的 AC/DC 转换器概述

电动汽车构成了未来实现可持续交通部门的有前途技术的主要部分。AC/DC 转换器是扩展和改进 EV 功能的骨干组件。本文概述了 AC/DC 转换器、充电站类型、传统两电平 (2L) AC/DC 转换器面临的问题以及使用多电平转换器 (MLC) 的重要性。 AC/DC 充电器示意图&#xff08;&#xff…

01 Shell编程规范与变量

1、Shell脚本概述 在一些复杂的Linux维护工作中&#xff0c;大量的重复性的输入和交互操作不仅费力费时&#xff0c;而且容易出错&#xff0c;而编写一个恰到好处的Shell脚本程序&#xff0c;可以批量处理、自动化地完成一系列维护任务&#xff0c;大大减轻管理员的负担。 Sh…

我在淄博,给唐朝古树办“身份证” | 《社区开放麦》首期预告

&#xff08;预约直播&#xff09; 或许每一个男孩都曾向往成为英雄&#xff0c;时常在内心预演用魔法拯救世界的场景。而回到没有超能力的现实生活&#xff0c;平凡人即便只有一技之长&#xff0c;也能拥有属于自己的“高光时刻”。 在开源社区&#xff0c;有这样一位青年对…

【机器学习 复习】第2章 线性回归及最大熵模型

一、概念 1.回归就是用一条曲线对数据点进行拟合&#xff0c;该曲线称为最佳拟合曲线&#xff0c;这个拟合过程称为回归。 2.一个自变量 叫 一元线性回归&#xff0c;大于一个自变量 叫 多元线性回归。 &#xff08;1&#xff09;多元回归&#xff1a;两个x&#xff0c;一个…

idea解决git代码冲突,提交代码冲突如何有效解决

当在提交代码的时候遇到问题冲突&#xff0c;是已经进行git commit , 但是在 git push 的时候&#xff0c;出现提交代码问题冲突 处理方式&#xff1a; 在IDEA 左下角&#xff0c;找到git 比如在git commint 之前忘记了 git pull ,那么很容易在git push 的时候出现问题&…

简单了解MyBatis

MyBatis 1、快速入门 MyBatis中文手册官网MyBatis中文网 1.1、创建数据表添加数据 create table user(id int auto_increment primary key comment 主键id,name varchar(20) comment 姓名,age int comment 年龄,gender char(1) comment 性别&#xff08;1&#xff1a;男, 2…

AI写论文:如何结合AI工具和传统教学方法?

Sora——这个让人在24年初引爆AI圈的新产品&#xff0c;它究竟会如何改变我们的教育领域呢&#xff1f; 从gpt到Sora&#xff0c;从对话型的ai到游戏和短剧制作的新风口&#xff0c;我们从23年到24年一个接一个地被震惊&#xff01; Sora能够根据文本提示生成高质量的视频内容…

Java实现自动定时任务配置并判断当天是否需要执行示例

最近接到一个需求&#xff0c;用户要能配置一个定时循环的任务&#xff0c;就是和手机闹钟循环差不多&#xff0c;设置好比如周一、周二、周三&#xff0c;那么在这几天内这个任务就需要自动执行 需求不复杂&#xff0c;首先我需要判断当前是周几&#xff0c;当然用户说了让我…

北航数据结构与程序设计图部分选填题

一、 抓两个关键信息&#xff1a;无向图&#xff0c;邻接表。无向图中&#xff0c;边&#xff08;vi&#xff0c;vj&#xff09;要在vi的链表中记录一次&#xff0c;再以&#xff08;vj&#xff0c;vi&#xff09;的形式在vj的链表中记录一次。 每个边都要记录两次&#xff0c…

大创项目推荐 酒店评价的情感倾向分析

前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 酒店评价的情感倾向分析 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/post…

qemu 安装ubuntu22.04虚拟机 -纯命令行-可ssh-带网络-编译安装 linux kernel-编译安装 kernel module

1&#xff0c;预备系统盘数据 1.1 下载光盘 注意需要 liver-server $ wget https://releases.ubuntu.com/22.04.4/ubuntu-22.04.4-live-server-amd64.iso 1.2 挂载并拷贝 $ sudo mkdir /mnt/iso_ubuntu-22.04.4-live-server-amd64 $ sudo mount ubuntu-22.04.4-live-ser…

采用java+B/S架构开发的工业级UWB(Ultra-Wideband)室内定系统源码UWB定位系统技术接口及技术特点

采用javaB/S架构开发的工业级UWB&#xff08;Ultra-Wideband&#xff09;室内定系统源码UWB定位系统技术接口及技术特点 UWB&#xff08;Ultra-Wideband&#xff09;定位技术本身并不直接连接蓝牙或其他无线通信技术进行定位。然而&#xff0c;在实际应用中&#xff0c;UWB定位…

RecyclerVIew->加速再减速的RecyclerVIew平滑对齐工具类SnapHelper

XML文件 ItemView的XML文件R.layout.shape_item_view <?xml version"1.0" encoding"utf-8"?> <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"100dp"android:layout_heig…

Ubuntu 安装 CloudCompare

步骤&#xff1a; sudo apt install flatpakflatpak install flathub org.cloudcompare.CloudCompare此时会有报错&#xff1a; error: No remote refs found similar to ‘flathub’执行 flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.fla…

【大模型驯化-gradio】成功解决gradio出现httpcore.ReadTimeout: timed out问题

【大模型驯化-gradio】成功解决gradio出现httpcore.ReadTimeout: timed out问题 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取…

LeetCode刷题之HOT100之LRU缓存

2024/6/21 酷暑难耐&#xff0c;离开空调我将不知道能否《活着》&#xff0c;昨天跑步感觉全身的热无法排出去&#xff0c;出门那种热浪一阵一阵打过来&#xff0c;一点风都舍不得给我。早早的来到实验室&#xff0c;也没多早&#xff0c;九点哈哈&#xff0c;做题啦&#xff0…

Linux【实操篇-文件目录类命令】

05【实操篇-文件目录类命令】 1.pwd 显示当前工作目录的绝对路径 pwd:print working directory 打印工作目录 到现在为止&#xff0c;我们还不知道自己在系统的什么地方。在浏览器上&#xff0c;我们能够通过导航栏上的url&#xff0c;了解到自己在互联网上的具体坐标。相似的…

GNSS是什么意思?探索全球导航卫星系统的应用与发展

GNSS是什么意思&#xff1f;GNSS是全球导航卫星系统&#xff08;Global Navigation Satellite System&#xff09;的缩写&#xff0c;它借助于多颗位于地球轨道上的卫星&#xff0c;通过接收和处理卫星信号来实现高精度的全球定位和导航。GNSS系统不仅包括美国的GPS&#xff08…

C# 语言在AGI 赛道上能做什么

自从2022年11月OpenAI正式对外发布ChatGPT依赖&#xff0c;AGI 这条赛道上就挤满了重量级的选手&#xff0c;各大头部公司纷纷下场布局。原本就在机器学习、深度学习领域占据No.1的Python语言更是继续稳固了自己AI一哥的位置。凭借着Microsoft 和 OpenAI 长期以来一直是紧密相连…