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

【Python】主成分分析PCA - 算法、问题与Python实现

【Python】主成分分析PCA - 算法、问题与Python实现

  • 一、PCA 算法简介
    • (一)概念及作用
    • (二)基本原理
    • (三)算法步骤
      • 1.数据预处理
      • 2.计算协方差矩阵
      • 3.进行特征值分解
      • 4.选择主成分
      • 5.完成数据降维
  • 二、PCA 常见问题
    • (一)与其他算法的混淆点
    • (二)参数相关问题
    • (三)异常值影响
  • 三、Python 实现
    • (一)准备工作
      • **导入的库:**
    • (二)代码实现步骤
      • 1.数据预处理(去中心化)
      • 2.计算协方差矩阵
      • 3.进行特征值分解:
      • 4. 选择主成分:
      • 5.完成数据降维:
    • (三)结果解读与分析
  • 四、总结

一、PCA 算法简介

(一)概念及作用

主成分分析PCA,旨在利用降维的思想,把多指标转化为少数几个综合指标。
例如,在面对大量样本或大矩阵的数据时(像许多机器学习、深度学习应用场景中常出现的情况),虽然多变量大样本能提供丰富信息,但也增加了数据采集工作量,并且多数情况下变量之间可能存在相关性,这使得问题分析的复杂性大大增加,对整体分析带来不便。若分别对每个指标孤立分析,难以做到综合考量;而盲目减少指标又会损失很多信息,容易得出错误结论。
PCA 可以很好地解决这个问题,它能在减少需要分析的指标或维度的同时,尽量减少原指标所含信息的损失,以达到对收集的数据进行全面分析的目的。
另外,PCA 还常用于数据压缩,比如图像处理领域的 KL 变换就使用 PCA 做图像压缩,通过将高维数据映射到低维空间,实现数据量的减少;在特征提取方面,能够帮助找出数据中最具代表性的特征,去除一些冗余或者相关性较强的特征;同时也是数据预处理的有效手段,可简化后续数据分析、建模等操作流程。

(二)基本原理

核心:通过线性变换将原始数据投影到新的坐标系中,使得各主成分按照方差从大到小的顺序进行排列。
从几何意义上来说,以二维空间为例,想象将坐标轴进行旋转,旋转到坐标轴和数据分布所形成椭圆的长短轴平行时,代表长轴的变量就描述了数据的主要变化,而短轴的变量则描述了次要变化,此时我们可以用长轴变量代表数据包含的大部分信息,而忽略短轴所代表的信息,这样就完成了降维。推广到多维空间也是类似的道理。
那么如何去寻找方差最大的方向作为主成分方向呢?假设我们有一组数据,用向量表示(包含多个样本点,每个样本点又有多个维度特征),我们希望找到一个投影方向(可以用向量表示),当把数据投影到这个方向上时,投影后的数据方差尽可能大。这里涉及到一些数学推导,根据方差的定义以及线性代数的知识,我们知道投影后的数据方差可以表示为(其中就是协方差矩阵的一种形式),同时为了保证这个方向是唯一的,通常会加上约束条件(即是单位向量),然后利用拉格朗日乘子法等数学方法求解这个带约束的最优化问题,最终可以得出是协方差矩阵的特征向量。按照特征值的大小,对应的特征向量所确定的方向就是方差从大到小的主成分方向,这样就完成了主成分的提取以及按照方差大小的排序。

(三)算法步骤

1.数据预处理

  • **去除均值:**首先对数据进行去中心化操作,即对于每一个特征维度,计算其均值,将每个样本在该维度上的值减去这个均值,目的是让数据的中心位于原点,方便后续的计算以及更好地体现数据的变化情况。例如,假设有一组二维数据,先分别计算维度的均值和维度的均值,然后将每个样本变为。
  • 缩放特征:如果数据的各个特征维度的量纲不一致(比如一个特征是长度,单位是厘米,另一个特征是重量,单位是千克),那么还需要对特征进行缩放,常见的方法有标准化(将数据变为均值为 0,方差为 1 的分布)等,使得不同特征在后续计算中具有同等的重要性,避免因量纲问题导致某些特征对结果产生过大或过小的影响。

2.计算协方差矩阵

经预处理后的数据,接着计算其协方差矩阵。协方差矩阵反映了各个特征之间的相关性程度,其元素表示第个特征和第个特征之间的协方差。如果协方差为正值,说明两个特征正相关;协方差为负值,说明负相关;协方差为 0,则表示两个特征相互独立。对于维数据(有个特征),其协方差矩阵是一个的对称矩阵,可以通过相应的数学公式和编程方法(如在 Python 中利用numpy库的cov函数)来计算得到。

3.进行特征值分解

计算出协方差矩阵后,对其进行特征值分解。
特征值代表了对应特征向量方向上数据的方差大小,而特征向量就是我们前面提到的主成分方向。通过线性代数中的特征值分解算法,可以得到协方差矩阵的所有特征值以及对应的特征向量,并且一般按照特征值从大到小的顺序进行排列。

4.选择主成分

根据实际需求确定要选取的主成分个数。
常见的选取方法有两种,一种是设定一个累计方差贡献率的阈值(比如通常要求累计方差贡献率达到 80% 以上),按照特征值从大到小依次选取主成分,直到累计方差贡献率满足设定的阈值;另一种是根据特征值的大小,一般选取特征值大于等于 1 的主成分,因为特征值小于 1 意味着该主成分的解释力相对较低,对整体数据的代表性不强。

5.完成数据降维

确定好主成分后,将原始数据投影到选取的主成分所构成的空间中,也就是用原始数据与选取的主成分对应的特征向量做矩阵乘法运算,从而得到降维后的数据。例如,原始数据矩阵为(维,为样本个数,为特征个数),选取的个主成分对应的特征向量组成的矩阵为(维),那么降维后的数据(维)就可以通过来计算得到。

二、PCA 常见问题

(一)与其他算法的混淆点

在学习和使用 PCA 的过程中,很容易和一些其他算法产生混淆,其中较为典型的就是线性回归。

  • 首先,从目的上看,线性回归主要是用于预测结果,它通过构建自变量与因变量之间的线性关系,基于给定的自变量来对因变量进行预测。例如在房价预测场景中,根据房屋面积、房龄等自变量去预测房价这个因变量。而 PCA 的目的并非是做预测,它重点在于对数据进行降维处理,将高维数据投影到低维空间,同时尽可能保留原数据的主要信息,以方便后续的数据处理、可视化或者特征提取等操作。
  • 在计算误差方面也存在不同。线性回归计算的是点到拟合直线在垂直方向上的距离误差,也就是尝试最小化预测误差,使得预测值与真实值之间的差距尽可能小。而 PCA 计算的是点到投影点的正交距离(也就是最短距离),将其作为投射误差,PCA 的目标是找到一个令平方投影误差最小的低维空间。

(二)参数相关问题

PCA 的一个显著特点是完全无参数限制,这意味着它最后的结果只与数据本身有关,和用户是相对独立的。这种特性既有优势也存在一定弊端。

  • 从优势角度来看:它使得算法具有较强的通用性和客观性,无需用户手动去调整大量参数,降低了使用门槛,并且能够简化模型或是对数据进行压缩,同时最大程度地保持了原有数据的信息,计算方法相对简单,易于在计算机上实现。
  • 弊端也一样:有时候用户是具备一定的先验知识的,比如在某些特定领域中,根据过往经验或者专业知识,知道某些特征维度可能需要特殊对待,或者期望在降维过程中融入一些人为的干预因素,但由于 PCA 无参数限制这一特点,用户没办法将这些先验知识应用到处理过程中,就有可能导致最终的降维效果不佳,不能完全契合实际业务需求。例如在医学影像分析领域,专业医生可能对某些影像特征有特殊的关注和判断标准,但 PCA 在降维时不会考虑这些额外信息,可能会丢失一些关键特征的影响因素。

(三)异常值影响

异常值对 PCA 的结果产生影响主要是和 PCA 基于方差进行计算的原理相关。
PCA 的核心是要找到方差最大的方向作为主成分方向,数据的方差大小在整个算法过程中起着关键作用。而异常值往往是那些偏离大部分数据分布范围很远的数据点,它们的存在会极大地增大方差。比如说在一组正常身高数据集中(普遍在 150cm - 190cm 之间),突然出现了一个 250cm 这样的异常值,就会使得整体的方差被拉高。
在进行主成分计算时,方差的改变会干扰到各个方向上数据的分散程度衡量,进而影响对主成分方向的判断,最终导致计算出的主成分不能很好地代表原数据的真实结构和主要特征。所以在实际应用 PCA 之前,通常建议先对数据进行异常值的检测和处理,尽可能保证数据的质量,使得 PCA 能够发挥出更好的降维效果。

三、Python 实现

(一)准备工作

导入的库:

  • numpy 、sklearn.decomposition 模块里的 PCA 类,这个类可以让我们很方便地实现主成分分析,无需手动去进行复杂的底层计算。有时候可能还会用到 joblib 库来存储和读取训练好的 PCA 模型等,例如 import numpy as np 、from sklearn.decomposition import PCA 、import joblib 就是常见的导入语句写法。
  • 数据集方面:以iris 数据集为例来进行介绍。

(二)代码实现步骤

1.数据预处理(去中心化)

from sklearn.datasets import load_iris
import numpy as npiris = load_iris()
X = iris.data
X_mean = np.mean(X, axis=0)
X_norm = X - X_mean# 用iris 数据集获取特征数据 X,然后利用 numpy 库的 mean 函数按列(axis=0 表示按列求均值)计算每一个特征维度的均值,接着将每个样本在各维度上的值减去对应的均值,这样就实现了数据去中心化操作,得到了处理后的 X_norm 数据,方便后续计算。

2.计算协方差矩阵

cov_matrix = np.cov(X_norm, rowvar=False)# 用 numpy 库的 cov 函数来计算协方差矩阵,参数 rowvar=False 表示一行代表一个样本,一列代表一个特征维度,计算出的 cov_matrix 就是反映各个特征之间相关性程度的协方差矩阵,其元素 C_{ij} 体现了第 i 个特征和第 j 个特征之间的协方差大小。

3.进行特征值分解:

eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)
# 通过 numpy 库的 linalg.eig 函数对协方差矩阵进行特征值分解,得到的 eigenvalues 就是各个特征值,代表了对应特征向量方向上数据的方差大小,而 eigenvectors 就是对应的特征向量,也就是我们所需要的主成分方向,并且这些特征值和特征向量一般是按照特征值从大到小的顺序排列的(不过在有些情况下可能需要我们进一步手动排序来确保顺序准确用于后续操作)。

4. 选择主成分:

k = 2  # 这里假设选择2个主成分,实际可根据需求调整
top_eigenvectors = eigenvectors[:, :k]
# 通常可以根据累计方差贡献率的阈值或者特征值大小等方法来确定要选取的主成分个数,这里简单示例选取 k (比如 k = 2 )个主成分,然后通过切片操作从所有特征向量中取出对应个数的特征向量组成 top_eigenvectors,它就是我们确定好的用于降维的主成分所对应的特征向量矩阵。

5.完成数据降维:

X_projected = np.dot(X_norm, top_eigenvectors)
# 最后,将原始的去中心化后的数据 X_norm 与选取的主成分对应的特征向量矩阵 top_eigenvectors 做矩阵乘法运算(通过 numpy 的 dot 函数实现),得到的 X_projected 就是降维后的数据了,其维度从原来的特征维度降低到了我们选取的主成分个数对应的维度。

(三)结果解读与分析

首先,查看降维后的数据维度情况,比如我们前面示例中如果原始数据是 (150, 4) (150 个样本,4 个特征维度),经过降维选取 2 个主成分后,得到的降维后的数据维度变为 (150, 2),这就直观体现了数据维度的降低情况。
然后,关注 PCA 类或者相关计算得到的特征值相关信息。例如在 sklearn 库中,PCA 实例化对象有 explained_variance_ 属性,它返回所有的特征值,我们可以通过查看这些特征值的大小以及它们之间的比例关系,了解每个主成分所解释的方差大小。还有 explained_variance_ratio_ 属性,它表示每一个特征向量对应的特征值占总的特征值之和的比值,也就是各个主成分的方差贡献率,通过累积这些贡献率,我们可以判断选取的主成分对原始数据方差的解释程度。比如累计方差贡献率达到 80% 以上,就说明我们选取的这些主成分能够较好地保留原始数据的大部分信息,降维效果是比较合理的;反之,如果贡献率过低,则可能需要考虑增加主成分个数等调整操作。

四、总结

希望本文有大家有帮助, 如有错误,欢迎指正。
转载请注明原文链接:
https://blog.csdn.net/weixin_41613094/article/details/144589068?sharetype=blogdetail&sharerId=144589068&sharerefer=PC&sharesource=weixin_41613094&spm=1011.2480.3001.8118

相关文章:

【Python】主成分分析PCA - 算法、问题与Python实现

【Python】主成分分析PCA - 算法、问题与Python实现 一、PCA 算法简介(一)概念及作用(二)基本原理(三)算法步骤1.数据预处理2.计算协方差矩阵3.进行特征值分解4.选择主成分5.完成数据降维 二、PCA 常见问题…...

Go怎么做性能优化工具篇之pprof

工欲善其事、必先利其器。这次我们来看看Go的性能优化工具有哪些吧 Go性能优化的工具 一、pprof 工具 pprof 是 Go 语言自带的性能分析工具,可以帮助开发者分析程序的 CPU 使用情况、内存使用情况、goroutine 调度情况等,从而定位性能瓶颈。通过 pprof…...

DataOps驱动数据集成创新:Apache DolphinScheduler SeaTunnel on Amazon Web Services

引言 在数字化转型的浪潮中,数据已成为企业最宝贵的资产之一。DataOps作为一种文化、流程和实践的集合,旨在提高数据管道的质量和效率,从而加速数据从源头到消费的过程。白鲸开源科技,作为DataOps领域的领先开源原生公司&#xf…...

递归读取指定目录下的文件

序言 需要读取sftp服务器上符合指定的文件名正则的文件列表&#xff0c;目前想到的最好的办法就是递归。 我这里引入的依赖是&#xff1a; <!-- jsch-sftp连接 --><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artif…...

代码随想录算法训练营day46|动态规划part12

今天就结束动态规划章节了&#xff0c;以后还要多加练习。 今天的两道题都很有难度&#xff0c;647回文子串的思路非常巧妙&#xff0c;因为用一维dp数组比较难表示子串的起点和终点&#xff0c;所以需要用二维dp数组表示&#xff0c;dp[i][j]表示以i为起点&#xff0c;j为终点…...

ubuntu 24.04.1安装FTP流程

1、安装vsftpd&#xff1a; sudo apt update sudo apt install vsftpd 2、安装后重启查看vsftpd状态 sudo systemctl status vsftpd 输出如下所示&#xff0c;表明vsftpd服务处于活动状态并正在运行&#xff1a; * vsftpd.service - vsftpd FTP server Loaded: loaded (/…...

【Linux】UDP通信

udp使用的是数据报传输。可以一对一&#xff0c;一对多进行传输&#xff0c;用于快速&#xff0c;实时性高的场景 服务器端&#xff1a; 使用步骤&#xff1a; 1.创建socket 2.bind绑定可接收的客户端 3.while{ recv接收数据 send发送数据 } #include <stdio.h> #inclu…...

日期格式、JSR303校验

日期格式 public class Monster() {DateTimeFormat(pattern "yyyy-MM-dd")private Date birthday; } 输入&#xff1a;2024-11-12&#xff0c; 输出&#xff1a;Monster{birthdaySun Nov 12 00:00:00 CST 2024} public class Monster {JsonFormat(pattern &…...

ELK系列-(六)Redis也能作为消息队列?(上)

一、前文回顾 &#x1f50d; 在前面的ELK系列中&#xff0c;我们已经搭建了ELK的核心组件&#xff0c;包括&#xff1a; ELK系列-&#xff08;一&#xff09;Docker部署ELK核心组件ELK系列-&#xff08;二&#xff09;LogStash数据处理的瑞士军刀ELK系列-&#xff08;三&…...

点击展示大图预览

原文链接在table表格里能够实现&#xff0c;点击里面的图片实现大图预览的效果&#xff1b; 一、先安装viewer — 使用npm安装 npm install v-viewer --save二、在main.js中引入 import Viewer from v-viewer //点击图片大图预览 import viewerjs/dist/viewer.css Vue.use(…...

游戏AI实现-寻路算法(BFS)

广度优先搜索算法&#xff08;英语&#xff1a;Breadth-first search&#xff0c;缩写&#xff1a;BFS&#xff09;&#xff0c;又译作宽度优先搜索&#xff0c;或横向优先搜索&#xff0c;是一种图形搜索算法。 寻路地图搭建&#xff1a; 游戏AI实现-寻路地图搭建-CSDN博客 …...

tryhackme-Pre Security-HTTP in Detail(HTTP的详细内容)

任务一&#xff1a;What is HTTP(S)?&#xff08;什么是http&#xff08;s&#xff09;&#xff09; 1.What is HTTP? (HyperText Transfer Protocol)&#xff08;什么是 HTTP&#xff1f;&#xff08;超文本传输协议&#xff09;&#xff09; http是你查看网站的时候遵循的…...

CNN和Transfomer介绍

文章目录 CNN和Transfomer介绍CNN和Transfomer的区别1. **基本概念**2. **数据处理方式**3. **模型结构差异**4. **应用场景区别** 自注意力机制1. **自注意力机制的概念**2. **自注意力机制的实现步骤**3. **自注意力机制的优势** Transformer结构组成1. **多头注意力层&#…...

37. Three.js案例-绘制部分球体

37. Three.js案例-绘制部分球体 实现效果 知识点 WebGLRenderer WebGLRenderer 是Three.js中的一个渲染器类&#xff0c;用于将3D场景渲染到网页上。 构造器 WebGLRenderer( parameters : Object ) 参数类型描述parametersObject渲染器的配置参数&#xff0c;可选。 常用…...

Latex+VsCode+Win10搭建

最近在写论文&#xff0c;overleaf的免费使用次数受限&#xff0c;因此需要使用本地的形式进行编译。 安装TEXLive 下载地址&#xff1a;https://mirror-hk.koddos.net/CTAN/systems/texlive/Images/ 下载完成直接点击iso进行安装操作。 安装LATEX Workshop插件 设置VsCode文…...

【ETCD】【Linearizable Read OR Serializable Read】ETCD 数据读取:强一致性 vs 高性能,选择最适合的读取模式

ETCD 提供了两种不同类型的读取操作方式&#xff0c;分别是 Linearizable Read&#xff08;线性化读取&#xff09;和 Serializable Read&#xff08;可串行化读取&#xff09;。这两种方式主要区分在读取数据时对一致性的要求不同。 目录 1. Linearizable Read&#xff08;线…...

windows下搭建本地sofa-registry

官方介绍&#xff1a; SOFARegistry 是蚂蚁金服开源的一个生产级、高时效、高可用的服务注册中心。SOFARegistry 最早源自于淘宝的 ConfigServer&#xff0c;十年来&#xff0c;随着蚂蚁金服的业务发展&#xff0c;注册中心架构已经演进至第五代。目前 SOFARegistry 不仅全面服…...

什么是MyBatis

MyBatis 简介 MyBatis 是一个流行的 Java 持久层框架&#xff08;Persistence Framework&#xff09;&#xff0c;它主要用于简化数据库操作&#xff0c;提供了对数据库的映射支持&#xff0c;使得开发人员能够通过简单的配置和映射文件来执行数据库操作&#xff08;如增、删、…...

Docker如何运行一个Java的jar包程序

Docker如何运行一个Java的jar包程序 1、jar包程序 2、start.sh运行jar包脚本 #!/bin/bash #进入目录 cd /app #1.下载SDK并安装 java -jar SDKDown1.4.jar #2.加载环境变量 export LD_LIBRARY_PATH/opt/casb/CipherSuiteSdk_linux/lib echo $LD_LIBRARY_PATH #3.执行SDK java …...

c语言----顺序结构

顺序结构的基本概念 定义&#xff1a;顺序结构是C语言程序中最基本的结构&#xff0c;它按照语句的先后顺序依次执行。就像我们日常做事一样&#xff0c;一步一步地按照顺序来完成任务。在C语言程序中&#xff0c;从程序的第一条语句开始&#xff0c;逐句向下执行&#xff0c;…...

BERT采用双向训练

BERT采用双向训练 定义 BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言模型。它在自然语言处理(NLP)领域具有极其重要的地位,由谷歌在2018年提出,能够对文本进行深度的语义理解,从而广泛应用于各种语言相关的任务…...

流程引擎Activiti性能优化方案

流程引擎Activiti性能优化方案 Activiti工作流引擎架构概述 Activiti工作流引擎架构大致分为6层。从上到下依次为工作流引擎层、部署层、业务接口层、命令拦截层、命令层和行为层。 基于关系型数据库层面优化 MySQL建表语句优化 Activiti在MySQL中创建默认字符集为utf8&…...

安卓 文件管理相关功能记录

文件管理细分为图片、视频、音乐、文件四类 目录 权限 静态声明权限 动态检查和声明权限方法 如何开始上述动态申请的流程 提示 图片 获取图片文件的对象列表 展示 删除 视频 获取视频文件的对象列表 获取视频file列表 按日期装载视频文件列表 展示 播放 删除…...

监控视频汇聚融合云平台一站式解决视频资源管理痛点

随着5G技术的广泛应用&#xff0c;各领域都在通信技术加持下通过海量终端设备收集了大量视频、图像等物联网数据&#xff0c;并通过人工智能、大数据、视频监控等技术方式来让我们的世界更安全、更高效。然而&#xff0c;随着数字化建设和生产经营管理活动的长期开展&#xff0…...

【jvm】主要参数

Java 虚拟机&#xff08;JVM&#xff09;有许多参数用于控制其行为和性能&#xff0c;下面是一些 主要的 JVM 启动参数&#xff0c;这些参数通常分为以下几类&#xff1a; 内存管理相关参数 这些参数主要用来配置 JVM 的内存分配策略、堆内存、栈内存等。 -Xms 设置 JVM 启动…...

在Ubuntu中配置mysql,并允许外部访问数据库

在虚拟机中安装 MySQL 并允许外部访问&#xff0c;可以按照以下步骤操作&#xff1a; 1. 更新系统包 首先&#xff0c;确保你的系统是最新的&#xff0c;使用以下命令更新包列表&#xff1a; sudo apt update sudo apt upgrade2. 安装 MySQL Server 安装 MySQL 服务&#x…...

Golang的向前兼容性和toolchain规则,Go1.21.0

在 Go 1.21 中&#xff0c;在工具上新增了两个变化&#xff1a;增强了向前兼容性&#xff1b;工具链管理。 向前兼容性 在以前的版本中&#xff0c;Go 工具链尝试编译依赖于新版本的代码时&#xff0c;可能会遇到兼容性问题。例如&#xff0c;如果你的代码依赖于 Go 1.18 引入…...

如何有效修复ffmpeg.dll错误:一站式解决方案指南

当您遇到提示“ffmpeg.dll文件丢失”的错误时&#xff0c;这可能导致相关的应用程序无法启动或运行异常。本文将详细介绍如何有效地解决ffmpeg.dll文件丢失的问题&#xff0c;确保您的应用程序能够恢复正常运行。 ffmpeg.dll是什么&#xff1f;有哪些功能&#xff1f; ffmpeg.…...

更频繁的 Android SDK 发布:更快的创新、更高的质量和更完善

Android 一直致力于让创新更快地进入用户手中。除了每年的平台发布之外&#xff0c;我们还投资了Project Treble、Mainline、Google Play 服务、每月安全更新和季度发布&#xff0c;为 Pixel Drops 提供支持。 未来&#xff0c;Android 将更频繁地发布 SDK&#xff0c;计划于 …...

远程连接:构建智能家居舒适生活

远程连接技术让智能家居从梦想照进现实&#xff0c;为人们构建了舒适便捷的生活环境。通过家庭网络与各种智能设备的远程连接&#xff0c;用户可以在外出时&#xff0c;使用手机 APP 轻松控制家中的灯光、窗帘、空调、电视等设备。 例如&#xff0c;在炎热的夏天&#xff0c;下…...

Python 爬取网页文字并保存为 txt 文件教程

引言 在网络数据获取的过程中&#xff0c;我们常常需要从网页中提取有用的文字信息。Python 提供了强大的库来帮助我们实现这一目标。本教程将以https://theory.gmw.cn/2023 - 08/31/content_36801268.htm为例&#xff0c;介绍如何使用requests库和BeautifulSoup库爬取网页文字…...

多协议视频监控汇聚/视频安防系统Liveweb搭建智慧园区视频管理平台

智慧园区作为现代化城市发展的重要组成部分&#xff0c;不仅承载着产业升级的使命&#xff0c;更是智慧城市建设的重要体现。随着产业园区竞争的逐渐白热化&#xff0c;将项目打造成完善的智慧园区是越来越多用户关注的内容。 然而我们往往在规划前期就开始面临众多难题&#…...

InnoDB 查询成本

1. 单表查询成本 连接查询总成本 IO 成本 CPU 成本对于 InnoDB 存储引擎来说&#xff0c;页是磁盘和内存之间交互的基本单位&#xff0c;设计MySQL的大叔规定读取一个页面花费的成本默认是 1.0&#xff0c;读取以及检测一条记录是否符合搜索条件的成本默认是 0.2。1.0、0.2 …...

C++的高精度减法 分步详解

高精度减法计算原理 在读小学时&#xff0c;我们做减法都采用竖式方法&#xff0c;如图 1 所示。 这样&#xff0c;我们可以写出两个整数相减的算法。 我们就可以用 C 语言来模拟这个竖式减法的过程。我们可以考虑利用 C 的数组来存储对应数据&#xff0c;假设用数组 A 存储被…...

linux cpu 管理

视频教程&#xff1a;ubuntu cpu 管理_哔哩哔哩_bilibili 概述 平均负载&#xff0c;CPU 使用率&#xff0c;CPU上下文 1 平均负载 #查看命令&#xff1a; rootzyb:~# uptime 18:21:47 up 1:09, 2 users, load average: 0.00, 0.00, 0.00 依次则是过去 1 分钟、5 分钟、1…...

大批量URL去重的架构设计(redis-bitmap+redisson)

1. 引言 什么是数据去重&#xff1f; 在大数据处理中&#xff0c;去重是指消除重复数据&#xff0c;只保留唯一的数据记录。 去重的重要性 提高数据处理效率&#xff0c;节省存储空间&#xff0c;提升数据分析的准确性。 常见的去重技术 基于哈希函数、布隆过滤器、位图等方法…...

WebGPU跨平台应用开发

对于 Web 开发人员来说&#xff0c;WebGPU 是一个 Web 图形 API&#xff0c;可提供对 GPU 的统一和快速访问。WebGPU 公开了现代硬件功能&#xff0c;并允许在 GPU 上进行渲染和计算操作&#xff0c;类似于 Direct3D 12、Metal 和 Vulkan。 虽然这是真的&#xff0c;但这个故事…...

Proteus(8.15)仿真下载安装过程(附详细安装过程图)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、Proteus是什么&#xff1f; 二、下载链接 三、下安装步骤 1.解压&#xff0c;有键管理员运行 2.点击Next&#xff0c;进行下一步 3.勾选I accept…&#…...

vlan和vlanif

文章目录 1、为什么会有vlan的存在2、vlan(虚拟局域网)1、vlan原理1. 为什么这样划分了2、如何实现不同交换机相同的vlan实现互访呢3、最优化的解决方法&#xff0c;vlan不同交换机4、vlan标签和vlan数据帧 5、vlan实现2、基于vlan的划分方式1、基于接口的vlan划分方式2、基于m…...

Unity开发哪里下载安卓Android-NDK-r21d

google的东西&#xff0c;居然是完全开源的 真的不是很多公司能做到&#xff0c;和那种伪搜索引擎是不同的 到底什么时候google才会开始造车 不过风险很多&#xff0c;最好不要合资&#xff0c;风险更大...

期末速成C++【初识C++】

目录 1.英文单词 2.C的特点 3.C对C语言的补充 3.1命名空间和域操作符 &#x1f387;3.2控制台输入输出 3.3类型增强 3.3.1const常变量 3.3.2const与指针 3.3.3布尔类型与枚举类型 3.4默认参数 &#x1f387;3.5函数重载 &#x1f387;引用 3.6.1引用做函数参数 …...

爬虫案例学习6

获取淘宝商品数据2024-12-18 参考学习&#xff1a; 大佬博客 视频教程 通过搜索发现&#xff0c;数据是通过发送请求过来的&#xff0c;不是静态存在源代码的 所以我们需要请求这个接口获取数据&#xff1a;比如标题&#xff0c;价格&#xff0c;图片等信息 https://h5api.m…...

28、论文阅读:基于像素分布重映射和多先验Retinex变分模型的水下图像增强

A Pixel Distribution Remapping and Multi-Prior Retinex Variational Model for Underwater Image Enhancement 摘要介绍相关工作基于模型的水下图像增强方法&#xff1a;无模型水下图像增强方法&#xff1a;基于深度学习的水下图像增强方法&#xff1a; 论文方法概述像素分布…...

[BJDCTF2020]ZJCTF,不过如此 1

[BJDCTF2020]ZJCTF&#xff0c;不过如此 1 打开实例发现代码审计 需要GET传入text和file参数&#xff0c;然后执行文件包含 text需要读取到I have a dream文本&#xff0c;这边采用data流进行绕过 ?textdata://,I have a dream&filenext.php成功绕过&#xff0c;接下来…...

Hive的in与not in 值中有null的时候注意事项,join where条件等问题

在进行hive SQL查询数据的时候&#xff0c;where条件中使用了in或者not in&#xff0c;但是该值内有null空。 这时&#xff0c;无论是in还是not in&#xff0c;空值都不会进入该条件内&#xff0c;但是使用not in的时候只是希望把自己不想要的数据给排除掉&#xff0c;这时会同…...

大语言模型画图(流程图、框架图)

第一步&#xff1a;向随意大语言模型&#xff0c;描述内容&#xff0c;推荐豆包 豆包 加上下面Prompt 通过Mermaid语法&#xff0c;描述上面流程图 第二步&#xff1a;将生成Mermaid输入流程图生成网站 中文Mermaid - 流程图、关系图在线画图、生成和编辑器...

Oracle创建逻辑目录

Oracle 在执行逻辑备份及还原时&#xff0c;需要用到逻辑目录。 本文就来简单介绍一下逻辑目录相关的操作&#xff0c;希望对大家有所帮助。 ‌1.登录到Oracle数据库‌ 使用具有足够权限的数据库用户登录到Oracle数据库。通常&#xff0c;这需要是管理员账号&#xff0c;如SYS…...

[react] 优雅解决typescript动态获取redux仓库的类型问题

store.getState()是可以获取总仓库的 先拿到函数的类型 再用ReturnType<T> 它是 TypeScript 中的一个内置条件类型&#xff0c;用于获取某个函数类型 T 的返回值类型 代码 // 先拿总仓库的函数类型type StatefuncType typeof store.getState;//再拿函数类型T的返回值类…...

python如何获取excel单元格文字是否加粗

是的&#xff0c;Python 可以获取 Excel 单元格中的文字是否加粗。通常&#xff0c;这需要使用 openpyxl 库&#xff0c;它允许你读取和写入 Excel 文件&#xff08;.xlsx 格式&#xff09;。 以下是一个示例代码&#xff0c;展示如何检查某个单元格的文字是否加粗&#xff1a…...

我的性能优化经验

专业方向&#xff1a;App cpu/memory/gpu/流畅度/响应时间的优化&#xff0c;Anr&#xff0c;Framework CarPowerManagementService模块的&#xff08;STR&#xff09;&#xff0c;从0~1完成性能监控体系搭建&#xff0c;完成3大版本迭代高质量性能交付 响应时间&#xff1a; …...