【NumPy进阶】:内存视图、性能优化与高级线性代数
目录
- 1. 深入理解 NumPy 的内存视图与拷贝
- 1.1 内存视图(View)
- 1.1.1 创建视图
- 1.1.2 视图的特点
- 1.2 数组拷贝(Copy)
- 1.2.1 创建拷贝
- 1.2.2 拷贝的特点
- 1.3 视图与拷贝的选择
- 2. NumPy 的优化与性能提升技巧
- 2.1 向量化操作
- 示例:向量化替代循环
- 2.2 使用内存视图而非拷贝
- 2.3 使用合适的数据类型
- 2.4 并行计算
- 2.5 使用 `numexpr` 和 `Numba` 加速
- 3. 探索 `np.linalg` 模块的高级线性代数运算
- 3.1 矩阵乘法
- 3.2 求解线性方程组
- 3.3 计算矩阵的逆
- 3.4 特征值和特征向量
- 3.5 奇异值分解(SVD)
- 总结
在基础学习的基础上,接下来我们将深入探索 NumPy 的三个重要主题:内存视图与拷贝、性能优化技巧 和 高级线性代数运算。通过掌握这些内容,你将能够更高效地处理大型数据、优化计算性能,并在实际应用中使用高级的线性代数工具。
1. 深入理解 NumPy 的内存视图与拷贝
1.1 内存视图(View)
内存视图 是对原始数组数据的引用,而不是数据的副本。通过视图修改数据会影响原始数组。视图不会占用额外的内存,非常适合大数据处理。
NumPy 中的内存视图通常指的就是ndarray 数组类型的切片。
1.1.1 创建视图
import numpy as nparr = np.array([1, 2, 3, 4, 5])# 创建一个视图
view = arr[1:4]
print("View:", view) # 输出: [2 3 4]# 修改视图
view[0] = 99
print("Original Array:", arr) # 输出: [ 1 99 3 4 5]
1.1.2 视图的特点
- 视图和原数组共享相同的内存。
- 视图的修改会影响原数组。
- 视图的创建效率高,不涉及数据复制。
1.2 数组拷贝(Copy)
拷贝 是对原始数据的完整复制,修改拷贝不会影响原数组。拷贝适合需要保持原数据不变的场景。
1.2.1 创建拷贝
arr = np.array([1, 2, 3, 4, 5])# 创建一个拷贝
copy = arr[1:4].copy()
print("Copy:", copy) # 输出: [2 3 4]# 修改拷贝
copy[0] = 99
print("Original Array:", arr) # 输出: [1 2 3 4 5]
1.2.2 拷贝的特点
- 拷贝与原数组独立存储。
- 拷贝的修改不会影响原数组。
- 创建拷贝需要额外的内存和时间。
1.3 视图与拷贝的选择
- 使用视图:在内存敏感和数据量大的情况下,使用视图提高效率。
- 使用拷贝:在需要保护原始数据时,使用拷贝避免数据被意外修改。
2. NumPy 的优化与性能提升技巧
2.1 向量化操作
NumPy 的向量化操作利用底层 C 语言实现的高效算法,避免了 Python 的 for 循环,极大提高了性能。
示例:向量化替代循环
import numpy as np# 使用循环计算平方
arr = np.array([1, 2, 3, 4, 5])
squared_loop = [x**2 for x in arr]# 使用向量化计算平方
squared_vectorized = arr**2print(squared_vectorized) # 输出: [ 1 4 9 16 25]
2.2 使用内存视图而非拷贝
避免不必要的数据拷贝,使用视图可以节省内存和时间。
arr = np.random.rand(10000)# 使用视图进行切片
view = arr[:5000]
2.3 使用合适的数据类型
选择合适的数据类型可以减少内存消耗和提高计算速度。
# 使用 float32 而不是 float64
arr = np.array([1.2, 3.4, 5.6], dtype=np.float32)
2.4 并行计算
NumPy 在底层对一些操作进行了并行化,例如矩阵乘法、求和等。
A = np.random.rand(1000, 1000)
B = np.random.rand(1000, 1000)# 并行执行矩阵乘法
result = np.dot(A, B)
2.5 使用 numexpr 和 Numba 加速
numexpr:用于加速复杂的数学表达式。Numba:通过 Just-In-Time (JIT) 编译加速 Python 函数。
import numexpr as ne
import numpy as npa = np.random.rand(1000000)
b = np.random.rand(1000000)# 使用 numexpr 加速计算
result = ne.evaluate("a + b")
详情见此博客:【NumPy】使用numexpr和Numba加速运算
3. 探索 np.linalg 模块的高级线性代数运算
NumPy 的 np.linalg 模块提供了许多高级线性代数功能,包括矩阵分解、求解线性方程组、特征值分解等。
3.1 矩阵乘法
import numpy as npA = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])# 矩阵乘法
result = np.dot(A, B)
print(result)
输出:
[[19 22][43 50]]
3.2 求解线性方程组
求解形如 A x = b Ax = b Ax=b 的线性方程组。
A = np.array([[3, 1], [1, 2]])
b = np.array([9, 8])x = np.linalg.solve(A, b)
print(x)
输出:
[2. 3.]
3.3 计算矩阵的逆
A = np.array([[1, 2], [3, 4]])
inv_A = np.linalg.inv(A)
print(inv_A)
输出:
[[-2. 1. ][ 1.5 -0.5]]
3.4 特征值和特征向量
A = np.array([[4, -2], [1, 1]])# 计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(A)
print("Eigenvalues:", eigenvalues)
print("Eigenvectors:\n", eigenvectors)
3.5 奇异值分解(SVD)
A = np.array([[1, 2], [3, 4]])U, S, VT = np.linalg.svd(A)
print("U:\n", U)
print("S:\n", S)
print("VT:\n", VT)
总结
通过深入学习以上内容,你可以更灵活、高效地使用 NumPy:
- 内存视图与拷贝:理解何时使用视图、何时使用拷贝。
- 性能优化技巧:利用向量化、合适的数据类型和并行计算来提升性能。
- 高级线性代数运算:使用
np.linalg模块解决复杂的线性代数问题。
继续练习这些概念和技巧,将帮助你在数据科学、机器学习和科学计算领域更上一层楼!
相关文章:
【NumPy进阶】:内存视图、性能优化与高级线性代数
目录 1. 深入理解 NumPy 的内存视图与拷贝1.1 内存视图(View)1.1.1 创建视图1.1.2 视图的特点 1.2 数组拷贝(Copy)1.2.1 创建拷贝1.2.2 拷贝的特点 1.3 视图与拷贝的选择 2. NumPy 的优化与性能提升技巧2.1 向量化操作示例&#x…...
从YOLOv5到训练实战:易用性和扩展性的加强
文章目录 前言一、模型介绍二、YOLOv5网络结构1.Input(输入端):智能预处理与优化策略2.Backbone(骨干网络):高效特征提取3.NECK(颈部):特征增强与多尺度融合4.Prediction…...
Prim 算法在不同权重范围内的性能分析及其实现
Prim 算法在不同权重范围内的性能分析及其实现 1. 边权重取值在 1 到 |V| 范围内伪代码C 代码实现2. 边权重取值在 1 到常数 W 之间结论Prim 算法是一种用于求解加权无向图的最小生成树(MST)的经典算法。它通过贪心策略逐步扩展生成树,确保每次选择的边都是当前生成树到未加…...
canal安装使用
简介 canal [kənl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 工作原理 canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送 dump 协议…...
python爬虫常用数据保存模板(Excel、CSV、mysql)——scrapy中常用数据提取方法(CSS、XPATH、正则)(23)
文章目录 1、常用数据保存模板2.1 保存为Excel格式2.2 保存为CSV格式2.3 保存至mysql数据库2、scrapy中常用数据提取方法2.1 XPath选择器2.2 CSS选择器2.3 正则表达式1、常用数据保存模板 2.1 保存为Excel格式 # 1、导入模块 from openpyxl import workbook# 2、创建一个exce…...
You need to call SQLitePCL.raw.SetProvider()
在.NET环境中使用Entity Framework Core(EF Core)连接SQLite数据库时,报错。 使用框架 .NET8 错误信息: Exception: You need to call SQLitePCL.raw.SetProvider(). If you are using a bundle package, this is done by calling…...
IoTDB AINode 报错,call inference 301: Error ocurred while executing inference
问题及现象 使用时序数据库 IoTDB 的 AINode 的 call inference 语句后报错: Msg: org.apache.iotdb.jdbc.IoTDBSOLException:301: Error ocurred while executing inference:[tuple object has no attribute inference]解决方法 可以替换 venv 里面的…...
LLM之RAG实战(五十)| FastAPI:构建基于LLM的WEB接口界面
FastAPI是WEB UI接口,随着LLM的蓬勃发展,FastAPI的生态也迎来了新的机遇。本文将围绕FastAPI、OpenAI的API以及FastCRUD,来创建一个个性化的电子邮件写作助手,以展示如何结合这些技术来构建强大的应用程序。 下面我们开始分步骤操…...
项目-移动端适配的几种方案
目录 一、rem方案二、vw适配方案 一、rem方案 以vue2项目为例 下载安装包:npm install amfe-flexible --save在main.js中引入:import ‘amfe-flexible’下载安装包:npm install postcss-pxtorem --save项目下新建postcss.config.js文件&…...
HCIA-Access V2.5_2_2网络通信基础_TCP/IP协议栈报文封装
TCP/IP协议栈的封装过程 用户从应用层发出数据先会交给传输层,传输层会添加TCP或者UDP头部,然后交给网络层,网络层会添加IP头部,然后交给数据链路层,数据链路层会添加以太网头部和以太网尾部,最后变成01这样…...
LSTM详解
1. LSTM设计 LSTM(长短期记忆网络)详解 长短期记忆网络(LSTM, Long Short-Term Memory) 是一种特殊的循环神经网络(RNN),特别适合处理和预测序列数据中的长时间依赖关系。LSTM 通过引入“门机制”(如输入门、遗忘门、输出门)来解决标准 RNN 在长时间序列任务中梯度消…...
从零开始搭建Android开发环境:简单易懂的完整教程
前言: 作为安卓开发的入门,搭建开发环境是每个开发者都必须迈出的第一步。虽然这一步看似简单,但如果没有正确的配置,可能会遇到各种问题。本篇文章将为大家详细介绍如何从零开始搭建Android开发环境,确保你能够顺利开…...
大模型运用-Prompt Engineering(提示工程)
什么是提示工程 提示工程 提示工程也叫指令工程,涉及到如何设计、优化和管理这些Prompt,以确保AI模型能够准确、高效地执行用户的指令,如:讲个笑话、java写个排序算法等 使用目的 1.获得具体问题的具体结果。(如&…...
CMake简单使用(二)
目录 五、scope 作用域5.1 作用域的类型5.1.1 全局作用域5.1.2 目录作用域5.1.3 函数作用域 六、宏6.1 基本语法6.2 演示代码 七、CMake构建项目7.1 全局变量7.2 写入源码路径7.3 调用子目录cmake脚本7.4 CMakeLists 嵌套(最常用) 八、CMake 与库8.1 CMake生成动静态库8.1.1 动…...
攻防世界安卓刷题笔记(新手模式)1-4
1.基础android 进入后是这样的页面。查看源代码看看。首先要注意这个软件并没有加壳,所以我们可以直接着手分析。搜索错误提示“Failed”定位到关键代码,看样子就是检验输入的内容 注意到这里有一行关键代码,cond_39对应的正是failed那个地方…...
发现一个对话框中的按钮,全部失效,点击都没有任何反应,已经解决
前端问题,技术vue2,ts。 发现一个对话框中的按钮,全部失效,点击都没有任何反应。 因为我只在template标签中加入下面这个代码,并没有注册。 只要有一个子组件没有注册,就会影响所有的按钮,使当前…...
MyBatisPlus实现多表查询
在MyBatisPlus中实现多表查询,主要有以下几种方法: 使用注解进行多表查询: 你可以在Mapper接口中使用Select注解来编写SQL查询语句,实现多表查询。例如,如果你想根据用户ID查询用户信息和对应的区域名称,可…...
机器学习详解(5):MLP代码详解之MNIST手写数字识别
文章目录 1 MNIST数据集2 代码详解2.1 导入库和GPU2.2 MNIST数据集处理2.2.1 下载和导入2.2.2 张量(Tensors)2.2.3 准备训练数据 2.3 创建模型2.3.1 图像展开2.3.2 输入层2.3.3 隐藏层2.3.4 输出层2.3.5 模型编译 2.4 训练模型2.4.1 损失函数与优化器2.4.2 计算准确率2.4.3 训练…...
如何在vue中实现父子通信
1.需要用到的组件 父组件 <template><div id"app"><BaseCount :count"count" changeCount"cahngeCount"></BaseCount></div> </template><script> import BaseCount from ./components/BaseCount.v…...
PHP实现华为OBS存储
一:华为OBS存储文档地址 官方文档:https://support.huaweicloud.com/obs/index.html github地址:https://github.com/huaweicloud/huaweicloud-sdk-php-obs 二:安装华为OBS拓展 composer require obs/esdk-obs-php 三&#x…...
手把手教你用Python实现TOTP动态验证码生成器(附完整代码)
用Python构建TOTP动态验证码生成器的实战指南 1. 为什么需要TOTP动态验证码? 在数字身份安全领域,传统的用户名密码组合已经无法满足现代安全需求。根据Verizon《2023年数据泄露调查报告》,超过80%的黑客攻击利用了弱密码或被盗凭证。这就是为…...
【SpringAIAlibaba新手村系列】(12)RAG 检索增强生成技术
第十二章 RAG 检索增强生成技术 版本标注 Spring AI: 1.1.2Spring AI Alibaba: 1.1.2.0 章节定位 本章的 RetrievalAugmentationAdvisor VectorStore 仍然是经典 RAG 入门方案。但 Spring AI Alibaba 1.1.2.x 官方代码已经进一步演进到 RAG Workflow 思路,典型流程…...
揭秘蒸发冷省电空调,成车间降温设备优选
在工业生产中,大车间的降温一直是个重要问题。传统空调在大车间使用时,往往面临着能耗高、制冷效果不佳等难题。而蒸发冷省电空调的出现,为大车间降温带来了新的解决方案,逐渐成为车间降温设备的优选。蒸发冷省电空调在制冷原理上…...
2024终极突破:如何用Bypass Paywalls Clean免费解锁付费墙内容?[特殊字符]
2024终极突破:如何用Bypass Paywalls Clean免费解锁付费墙内容?🚀 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 你是否经常在搜索学术资料时被付…...
智慧医疗X光图像手骨骨折检测数据集VOC+YOLO格式20307张3类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):20307标注数量(xml文件个数):20307标注数量(txt文件个数):20307标注类…...
快马AI助力:十分钟用openclaw搭建局域网访问服务原型
今天想和大家分享一个快速搭建局域网访问服务原型的经验。最近在做一个内部项目,需要让团队成员能方便地访问我本地开发的服务,于是想到了用openclaw这个工具来实现内网穿透。整个过程比想象中简单很多,特别是在InsCode(快马)平台的帮助下&am…...
JAVA面试-JVM内存结构详解
Java虚拟机(JVM)内存结构,也称内存模型,是程序运行时的数据存储区域。根据《Java虚拟机规范》,可划分为线程私有和线程共享两大部分,以实现高效的内存管理和线程安全。其主要构成如下表所示: 内…...
IDEA中Module工程重命名的正确姿势与避坑指南
1. 为什么需要重命名Module工程? 在IntelliJ IDEA中开发多模块项目时,Module命名往往不是一蹴而就的。我遇到过很多次这样的情况:项目初期随便起了个module名字,随着业务发展发现名称与实际功能严重不符。比如有个数据分析项目&a…...
雀魂AI助手Akagi:革新麻将竞技的智能决策系统
雀魂AI助手Akagi:革新麻将竞技的智能决策系统 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將,能夠使用自定義的AI模型實時分析對局並給出建議,內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riichi City, Amatsuki, wit…...
产品经理开需求评审会议2026年这5款会议语音转文字工具 帮你节省90会议纪要整理时间
做了5年产品经理,谁懂啊,每周三四场需求评审会,自己记笔记跟不上,转头leader就让你出整理好的带待办的纪要,漏一个需求点就要背锅;之前录了音自己逐字转,1小时的会我要整理2小时,经常…...
