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

关联传播和 Python 和 Scikit-learn 实现

文章目录

  • 一、说明
  • 二、什么是 Affinity Propagation。
    • 2.1 先说Affinity 传播的工作原理
    • 2.2 更多细节
    • 2.3 传播两种类型的消息
    • 2.4 计算责任和可用性的分数
      • 2.4.1 责任
      • 2.4.2 可用性分解
      • 2.4.3 更新分数:集群是如何形成的
      • 2.4.4 估计集群本身的数量。
  • 三、亲和力传播的一些应用
  • 四、总结

关键词:
Affinity Propagation

一、说明

假设您有一个数据集,其中各个样本之间存在关系,您的目标是识别数据集中的相关样本组。聚类是无监督机器学习算法的一部分,可能是要走的路。但是,当您并不真正知道聚类的数量时,应该应用哪种聚类算法呢?

进入 Affinity Propagation,这是一种八卦风格的算法,它通过传递有关单个样本的受欢迎程度的信息来推断集群的数量,例如他们是否属于某个群体,甚至他们是否是一个群体的领导者。此算法可以估计数据集本身中的集群/组数量,是今天博客文章的主题。

首先,我们将从理论上了解 Affinity Propagation。它是什么 — 群体形成类比是如何运作的?它如何更详细地工作,即数学上?发送了哪些类型的消息,这些受欢迎程度指标是如何确定的?算法是如何收敛的?我们先来看这些问题。

接下来,我们提供使用 Scikit-learn 和 Python 的 Affinity Propagation 示例实现。我们一步一步地解释我们的模型代码,以便您可以逐个了解发生了什么。对于那些已经有一些经验并希望立即玩的人,也可以使用完整的模型代码。因此,今天的博客文章既是理论上的,也是实践的——我最喜欢的博客类型!

在本教程中,您将学习:如何使用 Scikit-learn 执行 Affinity Propagation 聚类。

二、什么是 Affinity Propagation。

2.1 先说Affinity 传播的工作原理

你还记得高中时,那里的学生团体聚集在一起——只有当某个团体的领导认为你很酷时,你才能成为该团体的成员吗?

虽然这个类比可能有点牵强,但我认为这就是用通俗易懂的英语解释聚类的 Affinity Propagation 的方式。对于一组数据点,开始一个 “组形成 ”过程,其中每个样本都与其他样本竞争以获得组成员资格。具有最多组大写的,组长被称为 exemplars (Scikit-learn, n.d.)。

这种机器学习技术的有趣之处在于,与 K-means 聚类 (Scikit-learn, n.d.) 不同,您不必提前配置集群的数量。主要缺点是复杂性:就所需的计算资源而言,它不是最便宜的机器学习算法之一 (Scikit-learn, n.d.)。因此,它是一种仅适用于 “中小型数据集” 的技术 (Scikit-learn, n.d.)。

2.2 更多细节

现在我们已经大致了解了 Affinity Propagation,是时候更详细地了解一下了。我们将看看几件事:

算法在高层次上是如何工作的;
传播的消息类型;
如何计算这些消息中的分数。
每次迭代后消息分数如何更新,从而如何形成真正的集群。
首先,与任何聚类分析算法一样,Affinity Propagation 是迭代的。这意味着它将完成多次迭代,直到完成。与 K-means 聚类相反,收敛性由某个阈值确定,而使用 Affinity Propagation (关联传播) 时,您可以配置要完成的迭代次数。之后,该算法假设收敛并将返回结果集群 (Scikit-learn, n.d.)。

2.3 传播两种类型的消息

在每次迭代期间,每个样本都会向其他样本广播两种类型的消息 (Scikit-learn, n.d.)。第一个称为责任 r(i,k) — 这是“样本 k 应该是样本 i 的示例的证据”(Scikit-learn, n.d.)。我一直记得是这样的:期望 k 的团队领导越大,对团队的责任就越大。这就是你如何知道,从 i 的角度来看,责任总是告诉你一些关于 k 对团队的重要性。

发送的另一种类型的消息是可用性。这与责任相反:i 应该选择 k 作为示例的确定性如何,即加入特定组的可用性如何 (Scikit-learn, n.d.)。在高中的情况下,假设你想加入一个半酷的小组(一些空闲),而你更愿意加入真正酷的小组。对于真正酷的那个,你的可用性要高得多。该责任告诉你需要接受谁才能加入小组,即最有可能的小组负责人或榜样。

2.4 计算责任和可用性的分数

现在让我们更仔细地了解一下责任和可用性的概念。现在我们知道了它们在高层次上代表什么,是时候详细研究它们了 — 这意味着从数学上。

2.4.1 责任

这是责任的公式 (Scikit-learn, n.d.):
在这里插入图片描述

现在让我们把这个公式分解成简单的英语。我们从左边开始。这里,r(i,k) 再次负责样本 k 是样本 i 的范例。但是什么决定了它呢?两个分量:
s(i, k) 和 max[ a(i, k’) + s(i, k’)∀ k’≠ k]。

首先是样本 i 和 k 之间的相似性。如果它们高度相似,则 k 应该是 i 的示例的几率非常高。然而,这并不是全部,因为我们不能只看相似性——因为其他样本也会试图说服它们是更适合 i 的示例。因此,相似性是相对的,这就是为什么我们需要减去那个大的 max 值。它看起来很复杂,但简单地归结为“所有其他样本 k’ 的最大可用性和相似性,其中 k’ 永远不会是 k”。我们简单地减去 k 的“最大竞争对手”的相似性和意愿,以作为示例来显示它的相对强度。

2.4.2 可用性分解

责任看起来很复杂,但实际上相对容易。可用性的公式也是如此 (Scikit-learn, n.d.):
在这里插入图片描述
在这里插入图片描述

正如我们所看到的,可用性被确定为介于 0 和 k 到 k 的责任(即它认为自己是示例或组长的重要性)和所有其他样本 i’ 到 k 的责任之和,其中 i’ 既不是 i 也不是 k。因此,就组形成而言,如果样本本身认为它非常重要,那么它就会更容易被潜在的样本所利用。

2.4.3 更新分数:集群是如何形成的

现在我们已经了解了责任和可用性的公式,让我们看看每次迭代后分数是如何更新的 (Scikit-learn, n.d.):
在这里插入图片描述
在这里插入图片描述

很简单:每次更新,我们取旧值的 λ 并将其与新值的 (1-λ) 合并。这个 lambda,也称为“阻尼值”,是确保平滑过渡的平滑因子;它避免了优化过程中的大振荡。

总而言之,Affinity Propagation 是一种算法,它:

2.4.4 估计集群本身的数量。

考虑到计算成本,对于中小型数据集非常有用。
通过四处“八卦”来工作,就好像它试图组建高中学生团体一样。
通过对单个样本随时间变化的 “吸引力” 进行小而平滑的更新,即在每次迭代之后。
确定样本的吸引力,回答问题“这可以是我想属于的小组的领导者吗”和样本本身(“有什么证据证明我是小组领导者?
现在让我们看看如何使用 Python 和 Scikit-learn 实现它!😃

使用 Python 和 Scikit-learn 实现 Affinity Propagation
我们又来了,我们在博客abou t K-means 聚类中看到的聚类,尽管我们今天的样本较少:
在这里插入图片描述

图片由作者提供
还记得我们是如何生成它们的吗?打开一个 Python 文件并将其命名为 ‘affinity.py’,添加导入(即 Scikit-learn、Numpy 和 Matplotlib)。

import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_blobs
from sklearn.cluster import AffinityPropagation

然后,我们添加一些配置选项:我们生成的样本总数、集群的中心以及我们将为其生成样本的类的数量。这些都将在 中使用,它会生成集群并分别将它们分配给 X 和 targets。make_blobs

我们使用 Numpy 保存它们,然后加载它们并再次将它们分配给 X。这两行代码对于您的模型运行不是必需的,但如果您想跨设置进行比较,您可能不希望每次都随机生成样本。通过保存一次,然后注释掉 和 ,您将一次又一次地从文件中加载它们:)savemake_blobs

# Configuration options
num_samples_total = 50
cluster_centers = [(20,20), (4,4)]
num_classes = len(cluster_centers)# Generate data
X, targets = make_blobs(n_samples = num_samples_total, centers = cluster_centers, n_features = num_classes, center_box=(0, 1), cluster_std = 1)np.save('./clusters.npy', X)
X = np.load('./clusters.npy')

然后,我们在加载数据后将数据拟合到 Affinity Propagation 算法中,这只需要两行代码。在另外两行中,我们得出了示例等特征,因此得出了聚类的数量:

# Fit AFfinity Propagation with Scikit
afprop = AffinityPropagation(max_iter=250)
afprop.fit(X)
cluster_centers_indices = afprop.cluster_centers_indices_
n_clusters_ = len(cluster_centers_indices)

最后,通过使用我们拟合的算法,我们预测所有样本属于哪个集群:

# Predict the cluster for all the samples
P = afprop.predict(X)

最后可视化结果:

# Generate scatter plot for training data
colors = list(map(lambda x: '#3b4cc0' if x == 1 else '#b40426', P))
plt.scatter(X[:,0], X[:,1], c=colors, marker="o", picker=True)
plt.title(f'Estimated number of clusters = {n_clusters_}')
plt.xlabel('Temperature yesterday')
plt.ylabel('Temperature today')
plt.show()

在这里的结果
在这里插入图片描述

完整型号代码
如果您希望立即获得完整的模型代码,以便您可以立即开始使用 — 开始吧!它也在我的 Github 存储库中可用。

import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_blobs
from sklearn.cluster import AffinityPropagation# Configuration options
num_samples_total = 50
cluster_centers = [(20,20), (4,4)]
num_classes = len(cluster_centers)# Generate data
X, targets = make_blobs(n_samples = num_samples_total, centers = cluster_centers, n_features = num_classes, center_box=(0, 1), cluster_std = 1)np.save('./clusters.npy', X)
X = np.load('./clusters.npy')# Fit AFfinity Propagation with Scikit
afprop = AffinityPropagation(max_iter=250)
afprop.fit(X)
cluster_centers_indices = afprop.cluster_centers_indices_
n_clusters_ = len(cluster_centers_indices)# Predict the cluster for all the samples
P = afprop.predict(X)# Generate scatter plot for training data
colors = list(map(lambda x: '#3b4cc0' if x == 1 else '#b40426', P))
plt.scatter(X[:,0], X[:,1], c=colors, marker="o", picker=True)
plt.title(f'Estimated number of clusters = {n_clusters_}')
plt.xlabel('Temperature yesterday')
plt.ylabel('Temperature today')
plt.show()Summary

三、亲和力传播的一些应用

Affinity Propagation 是一种强大的聚类算法,已在各个领域得到应用。它能够自动确定集群数量,使其在集群数量未知或难以确定的情况下特别有用。以下是 Affinity Propagation (AP) 算法的一些关键应用:

图像和视频分析:Affinity Propagation 已成功应用于图像和视频分析任务,例如对象识别、图像分割和视频摘要。通过将图像或视频中的相似区域或对象聚集起来,它可以帮助识别和分类不同的对象或场景。
自然语言处理:Affinity Propagation 已用于自然语言处理任务,例如文档聚类、主题建模和情感分析。它可以根据内容将类似的文档分组在一起,从而更轻松地组织和分析大型文本数据集。
生物信息学:AP 算法已应用于生物信息学中,用于基因表达分析、蛋白质结构预测和蛋白质相互作用网络聚类等任务。它可以帮助识别生物数据中的模式和关系,从而在基因组学和蛋白质组学领域获得见解和发现。
社交网络分析:Affinity Propagation 已用于社交网络分析,以识别网络中的社区或组。通过根据个人的社交关系或互动对个人进行聚类,它可以帮助理解社交网络的结构和动态。
市场划分:Affinity Propagation (AP) 已用于市场细分研究,根据客户的偏好、行为或人口统计数据对客户进行分组。这可以帮助企业针对特定的客户群并相应地定制他们的营销策略。

四、总结

在此博客文章中,我们了解了 Affinity Propagation 算法。这种聚类算法允许机器学习工程师通过 “消息传递” 来聚类他们的数据集。类似于高中时的小组组建方式,小组领导决定谁进入,谁必须选择另一个,拉动游戏也由算法玩。

通过查看传播的消息、与这些消息一起发送的责任和可用性指标,以及它们如何迭代收敛,我们首先了解了 Affinity Propagation 算法的理论部分。接下来是一个使用 Python 和 Scikit-learn 的实际示例,我们在其中逐步解释了如何实现 Affinity Propagation。对于那些感兴趣的人,上面也可以找到整个模型。

相关文章:

关联传播和 Python 和 Scikit-learn 实现

文章目录 一、说明二、什么是 Affinity Propagation。2.1 先说Affinity 传播的工作原理2.2 更多细节2.3 传播两种类型的消息2.4 计算责任和可用性的分数2.4.1 责任2.4.2 可用性分解2.4.3 更新分数:集群是如何形成的2.4.4 估计集群本身的数量。 三、亲和力传播的一些…...

若依基本使用及改造记录

若依框架想必大家都了解得不少,不可否认这是一款及其简便易用的框架。 在某种情况下(比如私活)使用起来可谓是快得一匹。 在这里小兵结合自身实际使用情况,记录一下我对若依框架的使用和改造情况。 一、源码下载 前往码云进行…...

c语言网 1127 尼科彻斯定理

原题 题目描述 验证尼科彻斯定理&#xff0c;即&#xff1a;任何一个整数m的立方都可以写成m个连续奇数之和。 输入格式 任一正整数 输出格式 该数的立方分解为一串连续奇数的和 样例输入 13 样例输出 13*13*132197157159161163165167169171173175177179181 ​ #include<ios…...

能说说MyBatis的工作原理吗?

大家好&#xff0c;我是锋哥。今天分享关于【Redis为什么这么快?】面试题。希望对大家有帮助&#xff1b; 能说说MyBatis的工作原理吗&#xff1f; MyBatis 是一款流行的持久层框架&#xff0c;它通过简化数据库操作&#xff0c;帮助开发者更高效地与数据库进行交互。MyBatis…...

卡特兰数学习

1&#xff0c;概念 卡特兰数&#xff08;英语&#xff1a;Catalan number&#xff09;&#xff0c;又称卡塔兰数&#xff0c;明安图数。是组合数学中一种常出现于各种计数问题中的数列。它在不同的计数问题中频繁出现。 2&#xff0c;公式 卡特兰数的递推公式为&#xff1a;f(…...

【算法】多源 BFS

多源 BFS 1.矩阵距离2.刺杀大使 单源最短路问题 vs 多源最短路问题 当问题中只存在一个起点时&#xff0c;这时的最短路问题就是单源最短路问题。当问题中存在多个起点而不是单一起点时&#xff0c;这时的最短路问题就是多源最短路问题。 多源 BFS&#xff1a;多源最短路问题…...

解锁数字经济新动能:探寻 Web3 核心价值

随着科技的快速发展&#xff0c;我们正迈入一个全新的数字时代&#xff0c;Web3作为这一时代的核心构成之一&#xff0c;正在为全球数字经济带来革命性的变革。本文将探讨Web3的核心价值&#xff0c;并如何推动数字经济的新动能。 Web3是什么&#xff1f; Web3&#xff0c;通常…...

CAN总线数据采集与分析

CAN总线数据采集与分析 目录 CAN总线数据采集与分析1. 引言2. 数据采集2.1 数据采集简介2.2 数据采集实现 3. 数据分析3.1 数据分析简介3.2 数据分析实现 4. 数据可视化4.1 数据可视化简介4.2 数据可视化实现 5. 案例说明5.1 案例1&#xff1a;数据采集实现5.2 案例2&#xff1…...

appium自动化环境搭建

一、appium介绍 appium介绍 appium是一个开源工具、支持跨平台、用于自动化ios、安卓手机和windows桌面平台上面的原生、移动web和混合应用&#xff0c;支持多种编程语言(python&#xff0c;java&#xff0c;Ruby&#xff0c;Javascript、PHP等) 原生应用和混合应用&#xf…...

二叉树高频题目——下——不含树型dp

一&#xff0c;普通二叉树上寻找两个节点的最近的公共祖先 1&#xff0c;介绍 LCA&#xff08;Lowest Common Ancestor&#xff0c;最近公共祖先&#xff09;是二叉树中经常讨论的一个问题。给定二叉树中的两个节点&#xff0c;它的LCA是指这两个节点的最低&#xff08;最深&…...

Java并发学习:进程与线程的区别

进程的基本原理 一个进程是一个程序的一次启动和执行&#xff0c;是操作系统程序装入内存&#xff0c;给程序分配必要的系统资源&#xff0c;并且开始运行程序的指令。 同一个程序可以多次启动&#xff0c;对应多个进程&#xff0c;例如同一个浏览器打开多次。 一个进程由程…...

【ProxyBroker】用Python打破网络限制的利器

ProxyBroker 1. 什么是ProxyBroker2. ProxyBroker的功能3. ProxyBroker的优势4. ProxyBroker的使用方法5. ProxyBroker的应用场景6.结语项目地址&#xff1a; 1. 什么是ProxyBroker ProxyBroker是一个开源工具&#xff0c;它可以异步地从多个来源找到公共代理&#xff0c;并同…...

Gradle buildSrc模块详解:集中管理构建逻辑的利器

文章目录 buildSrc模块二 buildSrc的使命三 如何使用buildSrc1. 创建目录结构2. 配置buildSrc的构建脚本3. 编写共享逻辑4. 在模块中引用 四 典型使用场景1. 统一依赖版本管理2. 自定义Gradle任务 3. 封装通用插件4. 扩展Gradle API 五 注意事项六 与复合构建&#xff08;Compo…...

2025数学建模美赛|F题成品论文

国家安全政策与网络安全 摘要 随着互联网技术的迅猛发展&#xff0c;网络犯罪问题已成为全球网络安全中的重要研究课题&#xff0c;且网络犯罪的形式和影响日益复杂和严重。本文针对网络犯罪中的问题&#xff0c;基于多元回归分析和差异中的差异&#xff08;DiD&#xff09;思…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.10 文本数据炼金术:从CSV到结构化数组

1.10 《文本数据炼金术&#xff1a;从CSV到结构化数组》 目录 #mermaid-svg-TNkACjzvaSXnULaB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-TNkACjzvaSXnULaB .error-icon{fill:#552222;}#mermaid-svg-TNkACjzva…...

「蓝桥杯题解」蜗牛(Java)

题目链接 这道题我感觉状态定义不太好想&#xff0c;需要一定的经验 import java.util.*; /*** 蜗牛* 状态定义&#xff1a;* dp[i][0]:到达(x[i],0)最小时间* dp[i][1]:到达 xi 上方的传送门最小时间*/public class Main {static Scanner in new Scanner(System.in);static f…...

基于springboot+vue的流浪动物救助系统的设计与实现

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

51单片机开发:IO扩展(串转并)实验

实验目标&#xff1a;通过扩展口从下至上依次点亮点阵屏的行。 下图左边是74HC595 模块电路图&#xff0c;右边是点阵屏电图图。 SRCLK上升沿时&#xff0c;将SER输入的数据移送至内部的移位寄存器。 RCLK上升沿时&#xff0c;将数据从移位寄存器移动至存储寄存器&#xff0c…...

JAVA实战开源项目:购物商城网站(Vue+SpringBoot) 附源码

本文项目编号 T 032 &#xff0c;文末自助获取源码 \color{red}{T032&#xff0c;文末自助获取源码} T032&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...

C++学习——认识和与C的区别

目录 前言 一、什么是C 二、C关键字 三、与C语言不同的地方 3.1头文件 四、命名空间 4.1命名空间的概念写法 4.2命名空间的访问 4.3命名空间的嵌套 4.4命名空间在实际中的几种写法 五、输入输出 5.1cout 5.2endl 5.3cin 总结 前言 开启新的篇章&#xff0c;这里…...

Open FPV VTX开源之ardupilot双OSD配置摄像头

Open FPV VTX开源之ardupilot双OSD配置 1 源由2. 分析3. 配置4. 解决办法5. 参考资料 1 源由 鉴于笔者这台Mark4 Copter已经具备一定的历史&#xff0c;目前机载了两个FPV摄像头&#xff1a; 模拟摄像头数字摄像头(OpenIPC) 测试场景&#xff1a; 从稳定性的角度&#xff1…...

基于微信小程序高校课堂教学管理系统 课堂管理系统微信小程序(源码+文档)

目录 一.研究目的 二.需求分析 三.数据库设计 四.系统页面展示 五.免费源码获取 一.研究目的 困扰管理层的许多问题当中,高校课堂教学管理也是不敢忽视的一块。但是管理好高校课堂教学又面临很多麻烦需要解决,如何在工作琐碎,记录繁多的情况下将高校课堂教学的当前情况反…...

unity商店插件A* Pathfinding Project如何判断一个点是否在导航网格上?

需要使用NavGraph.IsPointOnNavmesh(Vector3 point) 如果点位于导航网的可步行部分&#xff0c;则为真。 如果一个点在可步行导航网表面之上或之下&#xff0c;在任何距离&#xff0c;如果它不在更近的不可步行节点之上 / 之下&#xff0c;则认为它在导航网上。 使用方法 Ast…...

三星手机人脸识别解锁需要点击一下电源键,能够不用点击直接解锁吗

三星手机的人脸识别解锁功能默认需要滑动或点击屏幕来解锁。这是为了增强安全性&#xff0c;防止误解锁的情况。如果希望在检测到人脸后直接进入主界面&#xff0c;可以通过以下设置调整&#xff1a; 打开设置&#xff1a; 进入三星手机的【设置】应用。 进入生物识别和安全&a…...

read+write实现:链表放到文件+文件数据放到链表 的功能

思路 一、 定义链表&#xff1a; 1 节点结构&#xff08;数据int型&#xff09; 2 链表操作&#xff08;创建节点、插入节点、释放链表、打印链表&#xff09;。 二、链表保存到文件 1打开文件 2遍历链表、写文件&#xff1a; 遍历链表,write()将节点数据写入文件。…...

猫怎么分公的母的?

各位铲屎官们&#xff0c;是不是刚领养了一只小猫咪&#xff0c;却分不清它是公是母&#xff1f;别急&#xff0c;今天就来给大家好好揭秘&#xff0c;如何轻松辨别猫咪的性别&#xff0c;让你不再为“它”是“他”还是“她”而烦恼&#xff01; 一、观察生殖器位置 最直接的方…...

为何SAP S4系统中要设置MRP区域?MD04中可否同时显示工厂级、库存地点级的数据?

【SAP系统PP模块研究】 一、物料主数据的MRP区域设置 SAP ECC系统中想要指定不影响MRP运算的库存地点,是针对库存地点设置MRP标识,路径为:SPRO->生产->物料需求计划->计划->定义每一个工厂的存储地点MRP,如下图所示: 另外,在给物料主数据MMSC扩充库存地点时…...

Redis for AI

Redis存储和索引语义上表示非结构化数据&#xff08;包括文本通道、图像、视频或音频&#xff09;的向量嵌入。将向量和关联的元数据存储在哈希或JSON文档中&#xff0c;用于索引和查询。 Redis包括一个高性能向量数据库&#xff0c;允许您对向量嵌入执行语义搜索。可以通过过…...

初阶2 类与对象

本章重点 上篇1.面向过程和面向对象初步认识2.类的引入---结构体3.类的定义3.1 语法3.2 组成3.3 定义类的两种方法&#xff1a; 4.类的访问限定符及封装4.1 访问限定符4.2封装---面向对象的三大特性之一 5.类的作用域6.类的实例化7.类对象模型7.1 如何计算类对象的大小 8.this指…...

kafka-部署安装

一. 简述&#xff1a; Kafka 是一个分布式流处理平台&#xff0c;常用于构建实时数据管道和流应用。 二. 安装部署&#xff1a; 1. 依赖&#xff1a; a). Java&#xff1a;Kafka 需要 Java 8 或更高版本。 b). zookeeper&#xff1a; #tar fxvz zookeeper-3.7.0.tar.gz #…...

深入探讨防抖函数中的 this 上下文

深入剖析防抖函数中的 this 上下文 最近我在研究防抖函数实现的时候&#xff0c;发现一个耗费脑子的问题&#xff0c;出现了令我困惑的问题。接下来&#xff0c;我将通过代码示例&#xff0c;深入探究这些现象背后的原理。 示例代码 function debounce(fn, delay) {let time…...

人工智能丨Midscene:让UI自动化测试变得更简单

在这个数字化时代&#xff0c;每一个细节的优化都可能成为产品脱颖而出的关键。而对于测试人员来说&#xff0c;确保产品界面的稳定性和用户体验的流畅性至关重要。今天&#xff0c;我要向大家介绍一款名为Midscene的工具&#xff0c;它利用自然语言处理&#xff08;NLP&#x…...

【数据结构】_链表经典算法OJ(力扣版)

目录 1. 移除链表元素 1.1 题目描述及链接 1.2 解题思路 1.3 程序 2. 反转链表 2.1 题目描述及链接 2.2 解题思路 2.3 程序 3. 链表的中间结点 3.1 题目描述及链接 3.2 解题思路 3.3 程序 1. 移除链表元素 1.1 题目描述及链接 原题链接&#xff1a;203. 移除链表…...

DeepSeek-R1技术报告速读

春节将至&#xff0c;DeepSeek又出王炸&#xff01;DeepSeek-R1系列重磅开源。本文对其技术报告做简单解读。 话不多说&#xff0c;show me the benchmark。从各个高难度benchmark结果来看&#xff0c;DeepSeek-R1已经比肩OpenAI-o1-1217&#xff0c;妥妥的第一梯队推理模型。…...

560. 和为 K 的子数组

【题目】&#xff1a;560. 和为 K 的子数组 方法1. 前缀和 class Solution { public:int subarraySum(vector<int>& nums, int k) {int res 0;int n nums.size();vector<int> preSum(n 1, 0); // 下标从1开始存储for(int i 0; i < n; i) {preSum[i 1]…...

鸿蒙仓颉环境配置(仓颉SDK下载,仓颉VsCode开发环境配置,仓颉DevEco开发环境配置)

目录 ​1&#xff09;仓颉的SDK下载 1--进入仓颉的官网 2--点击图片中的下载按钮 3--在新跳转的页面点击即刻下载 4--下载 5--找到你们自己下载好的地方 6--解压软件 2&#xff09;仓颉编程环境配置 1--找到自己的根目录 2--进入命令行窗口 3--输入 envsetup.bat 4--验证是否安…...

NodeJs / Bun 分析文件编码 并将 各种编码格式 转为 另一个编码格式 ( 比如: GB2312→UTF-8, UTF-8→GB2312)

版本号 "iconv-lite": "^0.6.3", "chardet": "^2.0.0",github.com/runk/node-chardet 可以识别文本是 哪种编码 ( 大文件截取一部分进行分析,速度比较快 ) let bun_file_obj Bun.file(full_file_path) let file_bytes await bun_f…...

Java学习笔记(二十五)

1 Kafka Raft 简单介绍 Kafka Raft (KRaft) 是 Kafka 引入的一种新的分布式共识协议&#xff0c;用于取代之前依赖的 Apache ZooKeeper 集群管理机制。从 Kafka 2.8 开始&#xff0c;Kafka 开始支持基于 KRaft 的独立模式&#xff0c;计划在未来完全移除 ZooKeeper 的依赖。 1…...

Baklib如何结合内容中台与人工智能技术实现数字化转型

内容概要 在当前快速发展的数字环境中&#xff0c;企业面临着转型的紧迫性与挑战&#xff0c;尤其是在内容管理和用户互动的领域。内容中台作为一种集成化的解决方案&#xff0c;不仅能够提高企业在资源管理方面的效率&#xff0c;还能够为企业提供一致性和灵活性的内容分发机…...

git困扰的问题

.gitignore中添加的某个忽略文件并不生效 把某些目录或文件加入忽略规则&#xff0c;按照上述方法定义后发现并未生效&#xff0c; gitignore只能忽略那些原来没有被追踪的文件&#xff0c;如果某些文件已经被纳入了版本管理中&#xff0c;则修改.gitignore是无效的。 解决方…...

第05章 12 可视化热量流线图一例

下面是一个使用VTK&#xff08;Visualization Toolkit&#xff09;和C编写的示例代码&#xff0c;展示如何在一个厨房模型中可视化热量流线图&#xff0c;并按照热量传递速度着色显示。这个示例假设你已经安装了VTK库&#xff0c;并且你的开发环境已经配置好来编译和运行VTK程序…...

Vue组件开发-使用 html2canvas 和 jspdf 库实现PDF文件导出 设置页面大小及方向

在 Vue 项目中实现导出 PDF 文件、调整文件页面大小和页面方向的功能&#xff0c;使用 html2canvas 将 HTML 内容转换为图片&#xff0c;再使用 jspdf 把图片添加到 PDF 文件中。以下是详细的实现步骤和代码示例&#xff1a; 步骤 1&#xff1a;安装依赖 首先&#xff0c;在项…...

LTV预估 | 深度学习PLTV之开山鼻祖ZILN

&#x1f923; 这一集让我们欢迎基于深度学习的pltv方法&#xff1a;ZILN&#xff0c;ZILN可以说是后面很多研究的参考方法&#xff0c;我看了好几篇最新的pltv论文&#xff0c;都是基于ZILN来做的。 文章目录 1 精简总结2 背景&挑战&#xff1a;3 方法&#xff1a;实验&am…...

MFC常用操作

1&#xff0c;获取STATIC控件的值 CString str; m_STATIC2.GetWindowText(str);//获取STATIC控件的值 MessageBox(str); 2.设置EDIT控件的值 m_EDIT2.SetWindowText(str);//设置EDIT控件的值 GetDlgItem(IDC_EDIT1)->SetWindowText("Leave");//设置EDIT控件的值…...

第24篇 基于ARM A9处理器用汇编语言实现中断<六>

Q&#xff1a;怎样设计ARM处理器汇编语言程序使用定时器中断实现实时时钟&#xff1f; A&#xff1a;此前我们曾使用轮询定时器I/O的方式实现实时时钟&#xff0c;而在本实验中将采用定时器中断的方式。新增第三个中断源A9 Private Timer&#xff0c;对该定时器进行配置&#…...

【学习笔记】计算机网络(二)

第2章 物理层 文章目录 第2章 物理层2.1物理层的基本概念2.2 数据通信的基础知识2.2.1 数据通信系统的模型2.2.2 有关信道的几个基本概念2.2.3 信道的极限容量 2.3物理层下面的传输媒体2.3.1 导引型传输媒体2.3.2 非导引型传输媒体 2.4 信道复用技术2.4.1 频分复用、时分复用和…...

2025多目标优化创新路径汇总

多目标优化是当下非常热门且有前景的方向&#xff01;作为AI领域的核心技术之一&#xff0c;其专注于解决多个相互冲突的目标的协同优化问题&#xff0c;核心理念是寻找一组“不完美但均衡”的“帕累托最优解”。在实际中&#xff0c;几乎处处都有它的身影。 但随着需求场景的…...

图漾相机-ROS2-SDK-Ubuntu版本编译(新版本)

官网编译文档链接&#xff1a; https://doc.percipio.xyz/cam/latest/getstarted/sdk-ros2-compile.html 国内gitee下载SDK链接&#xff1a; https://gitee.com/percipioxyz 国外github下载SDK链接&#xff1a; https://github.com/percipioxyz 1.Camport ROS2 SDK 介绍 1.1 …...

字符设备驱动模版-中断

字符设备驱动模版-中断 思维导图在线高清查看&#xff1a;https://www.helloimg.com/i/2025/01/27/679791b5257c0.png 修改设备树 1添加pinctrl节点 1创建对应的节点 在 iomuxc 节点的 imx6ul-evk 子节点下 2添加“fsl,pins”属性 3在“fsl,pins”属性中添加PIN配置信息 …...

STM32 旋转编码器

旋转编码器简介 旋转编码器&#xff1a;用来测量位置、速度或旋转方向的装置&#xff0c;当其旋转轴旋转时&#xff0c;其输出端可以输出与旋转速度和方向对应的方波信号&#xff0c;读取方波信号的频率和相位信息即可得知旋转轴的速度和方向 类型&#xff1a;机械触点式/霍尔传…...