《Python星球日记》 第47天:聚类与KMeans
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》
创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
专栏:《Python星球日记》,限时特价订阅中ing
目录
- 一、聚类与分类的区别
- 1. 监督学习 vs 无监督学习
- 2. 目标与应用不同
- 3. 实际比较
- 二、KMeans 算法原理与迭代过程
- 1. KMeans 算法简介
- 2. 关键概念
- 3. 迭代过程
- 4. 数学表示
- 三、评估聚类效果:轮廓系数
- 1. 聚类评估的挑战
- 2. 轮廓系数原理
- 3. 实际应用
- 四、代码练习:客户分群与图像颜色压缩
- 1. 客户分群案例
- 2. 图像颜色压缩案例
- 五、KMeans 的优缺点与应用场景
- 1. 优点
- 2. 缺点
- 3. 常见应用场景
- 六、总结与进阶
- 进阶学习方向:
👋 专栏介绍: Python星球日记专栏介绍(持续更新ing)
✅ 上一篇: 《Python星球日记》 第46天:决策树与随机森林
欢迎来到Python星球的第47天!🪐
今天我们将探索机器学习中一个非常重要的无监督学习方法——聚类分析,并深入了解最经典的聚类算法之一:K-Means。无论你是想了解客户购买行为、压缩图像还是发现数据中的隐藏模式,聚类都是一个强大的工具。让我们开始今天的学习吧!
一、聚类与分类的区别
1. 监督学习 vs 无监督学习
分类是一种监督学习方法,而聚类是一种无监督学习方法。这是它们最根本的区别:
- 分类:需要有标记好的训练数据(即我们事先知道每个样本属于哪个类别),模型学习如何将新样本分配到已知的类别中。
- 聚类:没有标记数据,算法自己发现数据中的模式和结构,将相似的数据点分组到一起。
2. 目标与应用不同
-
分类的目标:将新数据正确分配到预定义的类别
- 例如:垃圾邮件过滤(是/否),疾病诊断(良性/恶性)
-
聚类的目标:发现数据的内在结构,将相似对象分组
- 例如:客户分群、文档主题发现、图像分割
3. 实际比较
假设你有一组客户数据:
- 分类任务:预测客户是否会购买某产品(需要历史购买记录作为标签)
- 聚类任务:根据购买行为将客户分成不同群体(不需要事先知道群体数量或特征)
二、KMeans 算法原理与迭代过程
1. KMeans 算法简介
K-Means 算法是最流行的聚类算法之一,因其简单直观而被广泛应用。算法名称中的 “K” 表示我们希望数据被分成的聚类数量,这是需要预先指定的。
算法的核心思想是:将数据分成 K 个组,使得同一组内的数据点彼此尽可能相似,不同组之间的数据点尽可能不同。
2. 关键概念
- 聚类中心(Centroid):每个簇的"中心点"或"平均点"
- 距离度量:通常使用欧几里得距离来衡量数据点之间的相似度
- 迭代优化:通过反复调整聚类中心位置来优化结果
3. 迭代过程
KMeans 算法的详细步骤如下:
-
初始化:
- 随机选择 K 个数据点作为初始聚类中心
-
迭代:
- 分配步骤:将每个数据点分配到距离最近的聚类中心
- 更新步骤:重新计算每个聚类的中心(所有点的平均位置)
- 重复以上两步,直到聚类中心基本不再变化或达到最大迭代次数
-
结束:
- 输出最终的 K 个聚类及其中心点
4. 数学表示
-
目标:最小化所有点到其聚类中心的距离平方和(即惯性,Inertia)
-
数学公式:
J = ∑ i = 1 k ∑ x ∈ C i ∣ ∣ x − μ i ∣ ∣ 2 J = \sum_{i=1}^{k} \sum_{x \in C_i} ||x - \mu_i||^2 J=i=1∑kx∈Ci∑∣∣x−μi∣∣2
其中:
- J J J 是总体目标函数(需要最小化)
- k k k 是聚类数量
- C i C_i Ci 是第 i 个聚类
- μ i \mu_i μi 是第 i 个聚类的中心
- x x x 是属于聚类 C i C_i Ci 的数据点
三、评估聚类效果:轮廓系数
1. 聚类评估的挑战
与分类不同,聚类没有真实标签来评估结果。因此,我们需要使用内部指标来评估聚类质量:
- 紧凑性:同一聚类中的点应该彼此靠近
- 分离性:不同聚类之间应该明显分开
2. 轮廓系数原理
轮廓系数(Silhouette Coefficient)是一种综合评估聚类质量的指标,结合了紧凑性和分离性的考量。
对于每个数据点 i,计算:
a(i) = 平均簇内距离(i点到同簇其他点的平均距离)
b(i) = 最小簇间距离(i点到最近其他簇中所有点的平均距离)s(i) = (b(i) - a(i)) / max(a(i), b(i))
- s(i) 值范围在 [-1, 1] 之间
- s(i) 接近 1:数据点被很好地聚类
- s(i) 接近 0:数据点位于聚类边界
- s(i) 接近 -1:数据点可能被分配到错误的聚类
最终的轮廓系数是所有数据点 s(i) 的平均值。
3. 实际应用
轮廓系数可以帮助我们:
- 评估聚类的质量
- 确定最佳的 K 值(通常选择使轮廓系数最大的 K 值)
- 比较不同聚类算法的效果
# 使用 Scikit-learn 计算轮廓系数
from sklearn.metrics import silhouette_scoresilhouette_avg = silhouette_score(X, labels)
print(f"聚类的轮廓系数为: {silhouette_avg:.3f}")
四、代码练习:客户分群与图像颜色压缩
1. 客户分群案例
在营销和用户行为分析中,将客户分成不同群体是非常有价值的。下面,我们通过一个实例来展示如何使用 K-Means 进行客户分群:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import silhouette_score# 加载示例客户数据 (假设我们有购买金额和访问频率两个特征)
# 在实际应用中,你可能会从CSV文件或数据库加载数据
data = {'customer_id': range(1, 201),'purchase_amount': np.random.normal(500, 200, 200), 'visit_frequency': np.random.normal(10, 5, 200)
}
df = pd.DataFrame(data)# 为了模拟更真实的场景,我们创建几个高消费高频率和低消费低频率的客户
df.loc[0:20, 'purchase_amount'] = np.random.normal(1000, 100, 21)
df.loc[0:20, 'visit_frequency'] = np.random.normal(20, 2, 21)
df.loc[180:199, 'purchase_amount'] = np.random.normal(200, 50, 20)
df.loc[180:199, 'visit_frequency'] = np.random.normal(3, 1, 20)# 特征选择
X = df[['purchase_amount', 'visit_frequency']]# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 确定最佳聚类数 (使用轮廓系数)
silhouette_scores = []
K_range = range(2, 11)for k in K_range:kmeans = KMeans(n_clusters=k, random_state=42)labels = kmeans.fit_predict(X_scaled)silhouette_scores.append(silhouette_score(X_scaled, labels))# 找出最佳K值
best_k = K_range[np.argmax(silhouette_scores)]
print(f"最佳聚类数为: {best_k}")# 使用最佳K值进行最终聚类
kmeans = KMeans(n_clusters=best_k, random_state=42)
df['cluster'] = kmeans.fit_predict(X_scaled)# 可视化聚类结果
plt.figure(figsize=(10, 6))
colors = ['royalblue', 'crimson', 'forestgreen', 'darkorange', 'purple']for i in range(best_k):cluster_data = df[df['cluster'] == i]plt.scatter(cluster_data['purchase_amount'], cluster_data['visit_frequency'],c=colors[i % len(colors)], label=f'客户群 {i+1}')# 标记聚类中心
centers = scaler.inverse_transform(kmeans.cluster_centers_)
plt.scatter(centers[:, 0], centers[:, 1], s=200, marker='X', c='black', label='聚类中心'
)plt.title('客户分群 KMeans 结果')
plt.xlabel('购买金额')
plt.ylabel('访问频率')
plt.legend()
plt.grid(True, linestyle='--', alpha=0.7)
plt.show()# 分析每个客户群的特征
for i in range(best_k):cluster_data = df[df['cluster'] == i]print(f"\n客户群 {i+1} 特征 (数量: {len(cluster_data)}):")print(f"平均购买金额: {cluster_data['purchase_amount'].mean():.2f}")print(f"平均访问频率: {cluster_data['visit_frequency'].mean():.2f}")
通过这个分析,我们可以识别出:
- 高价值客户:购买金额高且访问频率高
- 潜在发展客户:访问频率高但购买金额低
- 低活跃客户:访问频率低且购买金额低
- 季节性客户:购买金额高但访问频率低
2. 图像颜色压缩案例
K-Means 的另一个有趣应用是图像颜色压缩。通过将图像中的所有颜色聚类成 K 个代表颜色,可以大幅减少图像所需的颜色数量。
from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.image import imread# 加载图片
img = imread(r'C:\Users\25399\Desktop\1.jpg') # 请使用本地的一张图片
print(f"原始图片大小: {img.shape}")# 将图片转换为二维数组,每行代表一个像素,有RGB三个通道
pixels = img.reshape(-1, 3)
print(f"转换后数据形状: {pixels.shape}")# 使用KMeans进行颜色聚类 (使用16个颜色)
n_colors = 16
kmeans = KMeans(n_clusters=n_colors, random_state=42)
kmeans.fit(pixels)# 替换每个像素的颜色为其所属聚类的中心颜色
compressed_palette = kmeans.cluster_centers_.astype('uint8')
compressed_pixels = compressed_palette[kmeans.labels_]
compressed_img = compressed_pixels.reshape(img.shape)# 显示对比结果
plt.figure(figsize=(12, 6))plt.subplot(1, 2, 1)
plt.imshow(img)
plt.title('原始图片 (数百万种颜色)')
plt.axis('off')plt.subplot(1, 2, 2)
plt.imshow(compressed_img)
plt.title(f'压缩后图片 (仅{n_colors}种颜色)')
plt.axis('off')plt.tight_layout()
plt.show()# 显示使用的调色板
plt.figure(figsize=(8, 2))
plt.title(f'使用的{n_colors}种颜色调色板')
for i in range(n_colors):plt.fill([i, i+1, i+1, i], [0, 0, 1, 1], color=compressed_palette[i]/255)
plt.xlim(0, n_colors)
plt.axis('off')
plt.show()
这个例子展示了 K-Means 如何帮助我们将图像从数百万种颜色压缩到仅 16 种颜色,同时保持图像的主要视觉特征。
五、KMeans 的优缺点与应用场景
1. 优点
- 简单直观:易于理解和实现
- 高效:计算复杂度较低,可以处理大数据集
- 适应性强:可用于各种类型的数据和应用场景
2. 缺点
- 需要预先指定 K 值:实际应用中可能难以确定
- 对初始聚类中心敏感:不同的初始化可能导致不同结果
- 对异常值敏感:异常值会显著影响聚类中心的位置
- 倾向于形成大小相等的簇:不适合处理不规则形状的簇
3. 常见应用场景
- 客户分群:识别具有相似购买行为的客户群体
- 图像分割与压缩:减少图像颜色数量,分割图像区域
- 异常检测:识别与主要聚类相距较远的数据点
- 文档聚类:将相似主题的文档分组在一起
- 推荐系统:基于用户行为相似性进行推荐
六、总结与进阶
今天我们学习了K-Means聚类算法,这是无监督学习中最重要的算法之一。我们了解了它与分类的区别,掌握了算法原理和迭代过程,学会了使用轮廓系数评估聚类效果,并通过客户分群和图像颜色压缩两个实例进行了实践。
进阶学习方向:
- 其他聚类算法:
- DBSCAN:基于密度的聚类,不需要预先指定聚类数量- 层次聚类:自下而上或自上而下构建聚类层次结构- 高斯混合模型:使用概率模型进行软聚类
- K-Means变种:
- K-Means++:改进的初始化方法,提高收敛速度- Mini-Batch K-Means:处理大数据集的优化版本
- 实际应用挑战:
- 高维数据处理:降维技术与聚类的结合- 可扩展性:处理超大规模数据集的技巧
到此为止,我们已经完成了第47天的学习内容。明天,我们将继续探索机器学习的精彩世界!如果你有任何问题,欢迎在评论区留言讨论。
创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
如果你对今天的内容有任何问题,或者想分享你的学习心得,欢迎在评论区留言讨论!
相关文章:
《Python星球日记》 第47天:聚类与KMeans
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏:《Python星球日记》,限时特价订阅中ing 目录 一、聚类与…...
linux(centos)联网情况下部署
nginx部署 1.linux(centos)联网情况下部署 1.下载nginx所需依赖 # 安装开发工具组(若未安装) sudo yum groupinstall "Development Tools"# 安装 OpenSSL 开发包 sudo yum install openssl-devel# 安装 PCRE 开发包 sudo yum install pcre-…...
Kubernetes生产级资源管理实战:从QoS策略到OOM防御体系
一、资源限制的本质:不是成本控制,而是稳定性保障 当集群中某个节点的内存耗尽时,Kubernetes会像冷酷的交通警察一样,根据Pod的"优先级证件"(QoS类别)决定哪些Pod需要被驱逐。这种机制直接关系到…...
gcc的使用
gcc 是 GNU Compiler Collection(GNU 编译器套件)的缩写,是 GNU 项目开发的编程语言编译器集合,支持多种编程语言(如 C、C、Objective-C、Fortran、Ada 等)。以下是关于 gcc 的核心信息: 1. 主要…...
聊一聊Qwen3思考模式实现以及背后原理探讨
Qwen3思考模式切换实现 硬开关 我们先通过官方的示例代码来体验一下,如何实现在思考模式和非思考模式之间切换 通过tokenizer.apply_chat_template的enable_thinking参数来实现 默认情况下,Qwen3 启用了思考功能,类似于 QwQ-32B。这意味着…...
spark行动算子
在 Apache Spark 中,行动算子(Action)用于触发对 RDD 的实际计算,并将结果返回给驱动程序(Driver)或保存到外部存储系统中。与转换算子(Transformation)不同,行动算子会立…...
电商双十一美妆数据分析(代码)
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import jieba # 数据读取 df pd.read_csv(双十一_淘宝美妆数据.csv) # 数据清洗 # 处理重复值 data df.drop_duplicates(inplaceFalse) data data.reset_index(in…...
STM32裸机开发问题汇总
一、代码编写 1. keil中某个文件无法修改 keil中某个文件无法修改,不能输入_keil5 h文件无法修改-CSDN博客 2.编译报错declaration may not appear after executable statement in block STM32常见错误error: #268: declaration may not appear after executabl…...
C语言复习笔记--自定义类型
今天我们来复习一下自定义类型.自定义类型大概分为结构体,枚举,联合体,数组这几种.数组在之前就介绍过.今天我们来看下其他三种. 结构体 首先来看结构体. 结构体类型的声明 之前在操作符的地方简单认识过结构体.下面我们回顾一下. 结构体回顾 结构是⼀些值的集合,这…...
做 iOS 调试时,我尝试了 5 款抓包工具
日常做开发的人,特别是和客户端接口打交道的同学,应该对“抓包”这件事不陌生。 调试登录流程、分析接口格式、排查错误返回、分析网络性能、甚至研究第三方 App 的数据通信……说到底,都绕不开“抓 HTTPS 包”这一步。 而这一步࿰…...
html css js网页制作成品——HTML+CSS珠海网页设计网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
FID和IS的区别
📊 生成模型评估:你选 IS 还是 FID? 在评估 GAN、Diffusion 等图像生成模型时,两个最常被提到的指标是: 🔹IS (Inception Score) 🔹FID (Frchet Inception Distance) 🧠 Inception…...
前端三大件--HTML
引言 在互联网的世界里,每一个绚丽多彩的网页背后,都离不开 HTML 的支撑。HTML(Hyper Text Markup Language,超文本标记语言)作为网页开发的基础语言,就像是搭建高楼大厦的砖块,是所有 Web 开发…...
Node.js 的 child_process 模块详解
Node.js 的 child_process 模块提供了创建子进程的能力,使 Node.js 应用能够执行系统命令、运行其他程序或脚本。这个模块非常强大,可以帮助我们实现很多复杂的功能。 1. exec - 执行 shell 命令 exec 方法用于执行 shell 命令,并缓冲任何产生的输出。 特点 创建 shell 来…...
日常知识点之随手问题整理(虚函数 虚函数表 继承的使用场景)
新来的同事提到一个虚函数解耦头文件的问题,就想起来对虚函数进行一些回顾。 他的问题是,通过纯虚函数,如何实现不包含头文件即可真正调用到子类的实际接口。 》这里肯定是不合理的,需要一个中间管理类,对纯虚函数和相…...
【软件设计师:数据结构】2.数据结构基础(二)
一、树 树是n(n≥0)个结点的有限集合,n=0时称为空树,在任一非空树中 ● 有且仅有一个称为根的结点。 ● 其余的结点可分为m(m≥0)个互不相交的子集T1,T2…,Tm,其中每个子集本身又是一棵树,并称其为根结点的子树。 1、树的基本概念 ● 双亲和孩子 ● 兄弟:具有相同双…...
Python训练营打卡——DAY18(2025.5.7)
目录 一、基于聚类进一步推断类型 1. 聚类分析 2. 簇的总结与定义 二、作业 1. 聚类分析 2. 簇的总结与定义 3. 模型效果提升 一、基于聚类进一步推断类型 选用昨天kmeans得到的效果进行聚类,进而推断出每个簇的实际含义。 1. 聚类分析 # 先运行之前预处理…...
初学Python爬虫
文章目录 前言一、 爬虫的初识1.1 什么是爬虫1.2 爬虫的核心1.3 爬虫的用途1.4 爬虫分类1.5 爬虫带来的风险1.6. 反爬手段1.7 爬虫网络请求1.8 爬虫基本流程 二、urllib库初识2.1 http和https协议2.2 编码解码的使用2.3 urllib的基本使用2.4 一个类型六个方法2.5 下载网页数据2…...
【CSS】Grid 的 auto-fill 和 auto-fit 内容自适应
CSS Grid 的 auto-fill 和 auto-fit /* 父元素 */ .grid {display: grid;/* 定义「网格容器」里有多少列,以及每列的宽度 *//* repeat 是个「重复函数」,表示后面的模式会被重复多次 *//* auto-fit 是一个特殊值,自动根据容器宽度ÿ…...
绕线机的制作与研究
绕线机的制作与研究 摘要 本文详细阐述了绕线机的制作过程,涵盖从设计规划到实际制作的各个环节。通过对绕线机工作原理的深入分析,确定了关键技术参数,并依此完成机械结构与控制系统的设计。在制作阶段,运用多种加工工艺完成零件制造与设备组装。经测试,自制绕线机性能…...
引用的使用
引用的语法 作用:起别名 引用的本质是指针常量 数据类型 &别名原名; 引用必须要初始化 引用一旦初始化,不能修改 不能返回局部变量的引用 引用做形参 #include<iostream> #include<string> using namespace std; //通过引用…...
css animation 动画属性
animation // 要绑定的关键帧规则名称 animation-name: slidein;// 定义动画完成一个周期所需的时间,秒或毫秒 animation-duration: 3s;// 定义动画速度曲线 animation-timing-function: ease;// 定义动画开始前的延迟时间 animation-delay: 1s;// 定义动画播放次数…...
Nacos源码—Nacos集群高可用分析(二)
4.集群节点的健康状态变动时的数据同步 (1)Nacos后台管理的集群管理模块介绍 在集群管理模块下,可以看到每个节点的状态和元数据。节点IP就是节点的IP地址以及端口,节点状态就是标识当前节点是否可用,节点元数据就是相关的Raft信息。 其中节点…...
SRAM详解
一、SRAM基础原理 定义与结构 SRAM(Static Random-Access Memory,静态随机存取存储器)是一种基于触发器(Flip-Flop)结构的易失性内存,通过交叉耦合的反相器(6晶体管,6T单元ÿ…...
JavaWeb:MySQL进阶
多表设计 一对多(多对一) 外键 一对一 多对多 多表查询 内连接 外连接 子查询 -- 查询员工表 select * from emp;-- 查询部门表 select * from dept;-- 查询员工和部门 select * from emp, dept; -- 笛卡尔积select * from emp, dept where emp.dept_i…...
Golang 接口 vs Rust Trait:一场关于抽象的哲学对话
一、引言 在现代编程语言中,接口(Interface) 和 Trait 是实现多态和抽象行为的关键机制。它们允许我们定义行为契约,让不同的类型共享相同的语义接口,从而提升代码的复用性和扩展性。 Go 和 Rust 分别代表了两种截然…...
智算中心的搭建标准
智算中心的搭建标准主要涉及以下几个方面: 开放标准: 硬件与软件开放:从硬件到软件、从芯片到架构,都应采用开放、标准的技术。例如,硬件支持如 OCP、ODCC、Open19 等开放社区标准,软件采用如 OpenStack、K…...
商汤科技前端面试题及参考答案
有没有配置过 webpack,讲一下 webpack 热更新原理,能否自己实现一些插件? Webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。在实际项目中,经常会对其进行配置,以满足项目的各种需求,比如处理不同类型的文件、优化代码、配置开发服务器等。 Webpack 热更…...
windows下docker的使用
找了个docker教程 Windows Docker 安装 | 菜鸟教程Windows Docker 安装 Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境。Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的…...
AI日报 · 2025年5月07日|谷歌发布 Gemini 2.5 Pro 预览版 (I/O 版本),大幅提升编码与视频理解能力
1、谷歌发布 Gemini 2.5 Pro 预览版 (I/O 版本),大幅提升编码与视频理解能力 谷歌于5月6日提前发布 Gemini 2.5 Pro 预览版 (I/O 版本),为开发者带来更强编码能力,尤其优化了前端与UI开发、代码转换及智能体工作流构建,并在WebDe…...
Redis 8.0 正式版发布,新特性很强!
就在前两天,Redis 8.0 正式版 (GA) 来了!这并不是一次简单的更新,Redis 8.0 不仅带来了性能上的进一步提升,还带来一些实用的新特性与功能增强。并且,最重要的是拥抱 AGPLv3 重归开源! 下面,简单…...
MySQL核心机制:日志系统、锁机制与事务管理的深度剖析
一.介绍 MySQL作为世界上最流行的开源关系型数据库之一,其强大的事务处理能力和高并发支持使其在各种复杂应用场景中得到广泛应用。MySQL的核心机制包括日志系统、锁机制和事务管理,这些机制共同确保了数据库的ACID特性,为应用程序提供了可靠…...
Mybatis标签使用 -association 绑定对象,collection 绑定集合
注意 association标签中的 select , column 属性使用 collection 标签中的 ofType 属性使用 Data public class Tours implements Serializable {private static final long serialVersionUID 1L;private Integer touId;private String tourName;private Integer guideId;pri…...
IBM BAW(原BPM升级版)使用教程Toolkit介绍
本部分为“IBM BAW(原BPM升级版)使用教程系列”内容的补充。 一、系统Toolkit 在 IBM Business Automation Workflow (BAW) 中,System Toolkit 是一组预先定义和配置好的工具、功能和组件,旨在帮助流程设计者和开发人员快速构建…...
排列组合算法:解锁数据世界的魔法钥匙
在 C 算法的奇幻世界里,排列和组合算法就像是两把神奇的魔法钥匙,能够帮我们解锁数据世界中各种复杂问题的大门。今天,作为 C 算法小白的我,就带大家一起走进排列和组合算法的奇妙天地。 排列算法:创造所有可能的顺序…...
LVGL -meter的应用
1 meter介绍 lv_meter 是 LVGL v8 引入的一种图形控件,用于创建仪表盘样式的用户界面元素,它可以模拟像速度表、电压表、温度表这类模拟表盘。它通过可视化刻度、指针、颜色弧线等来展示数值信息,是一种非常直观的数据展示控件。 1.1 核心特…...
MCP学习
一、MCP基础理论与核心概念 1.1 协议定义与设计目标 MCP(Model Context Protocol)是Anthropic公司于2024年11月开源的标准化协议,旨在解决大型语言模型(LLM)与外部工具、数据源之间的动态交互问题。其核心目标包括&…...
软件工程(三):模块的内聚模型
模块内聚的7种类型(从低到高) 等级类型描述示例1️⃣ 最低偶然性内聚(Coincidental Cohesion)模块内部的各功能毫无关系,随机拼凑一个模块中既有文件读写,又有图像压缩、还处理用户登录2️⃣逻辑性内聚&am…...
Java中字符转数字的原理解析 - 为什么char x - ‘0‘能得到对应数字
前言 在Java编程中,我们经常需要将字符形式的数字转换为实际的数值。有很多方法可以实现这一转换,比如使用Integer.parseInt()或Character.getNumericValue()等方法。但有一种简便且高效的方式是直接使用char - 0运算,本文将详细解析这种方法…...
View的事件分发机制
(一)为什么要有事件分发机制 安卓界面上面的View的层级结构是树形的,可能出现多个View重叠在一起的现象(如下图),当我们点击的地方为多个View重叠的区域时,这个点击事件应该给谁呢?为…...
【C++】类和对象【下】
目录 一、再探构造函数1、测试题 二、类型转换三、static成员1. 静态成员变量2. 静态成员函数 四、友元五、内部类六、匿名对象七、对象拷贝时的编译器优化 个人主页<—请点击 C专栏<—请点击 一、再探构造函数 之前我们实现构造函数时,初始化成员变量主要使…...
【JS逆向基础】并发爬虫
前言:所谓并发编程是指在一台处理器上“同时”处理多个任务。并发是在同一实体上的多个事件。强调多个事件在同一时间间隔发生。 1,进程、线程以及协程 【1】进程概念 我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算…...
Android组件化 -> 基础组件进行Application,Activity生命周期分发
在lib_common基础组件模块创建上下文持有类,生命周期派发类 object AppContextProvider {private lateinit var application: Applicationprivate var currentActivityRef: WeakReference<Activity>? null// 应用生命周期监听器列表private val appLifecyc…...
42. PCB防静电环设计
PCB防静电环的作用 1. PCB防静电环的作用2. 防静电环设计技术点 1. PCB防静电环的作用 防静电环主要用于生产、运输、售后等环节人体会直接接触电路板的场景。 防静电环只在顶层和底层设计即可。 2. 防静电环设计技术点...
深入理解Java反射机制
java反射是java语言中一个强大而灵活的特性,它允许程序在运行时检查和操作类、接口、字段和方法。 为了方便理解下文,我先给出Cat对象 public class Cat implements jump,Run {private int age;public String name;protected String color;double he…...
嵌入式音视频通话EasyRTC基于WebRTC技术驱动智能带屏音箱:开启智能交互新体验
一、引言 随着智能家居市场的蓬勃发展,智能带屏音箱作为家庭智能交互中心的重要组成部分,其功能需求日益丰富。EasyRTC凭借其低延迟、高稳定性的特点,为智能带屏音箱带来了全新的交互体验,能满足用户在视频通话、远程监控、在线…...
1987-2023年各省进出口总额数据整理(含进口和出口)(无缺失)
1987-2023年各省进出口总额数据整理(含进口和出口)(无缺失) 1、时间:1987-2023年 2、来源:各省年鉴、统计公报 3、指标:进出口总额(万美元)、进口总额(万美…...
paddle ocr 或 rapid ocr umi ocr 只识别了图片的下部分内容 解决方案
如上图,识别的准确率其实很高,但是只识别了下半部分的内容,上半部分的内容就没有识别到,其实是程序设置有点问题,程序设置的解决方案如下: 如上图,识别的准确率其实很高,但是只识别了下半部分的内容,上半部分的内容就没有识别到,其实是程序设置有点问题,程序设置的…...
【深度学习-Day 7】精通Pandas:从Series、DataFrame入门到数据清洗实战
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
如何测试 esp-webrtc-solution_solutions_doorbell_demo 例程?
软件准备 esp-webrtc-solution/solutions/doorbell_demo 例程 此例程集成了 WebSocket 传输视频流的应用 硬件准备 ESP32P4-Function-Ev-Board 环境搭建 推荐基于 esp-idf v5.4.1 版本的环境来编译此例程 若编译时出现依赖的组件报错,可进行如下修改ÿ…...