深度学习中常用计算距离的几种算法对比与python实现

前言

距离度量在许多机器学习算法中扮演着至关重要的角色,无论是监督学习还是无监督学习。选择适当的距离度量可以显著影响模型的性能。

在高维数据集中,欧几里得距离可能会受到所谓的“维度诅咒”的影响,因为随着维度的增加,数据点之间的距离会变得稀疏,导致欧几里得距离失效。在这种情况下,可以考虑使用更适合高维数据的距离度量,比如余弦相似度或者基于稀疏矩阵的距离度量。

另一方面,如果数据包含地理空间信息,如经纬度坐标,哈弗斯坦(Haversine)距离可能会更合适,因为它考虑了地球曲面的形状,能够更准确地衡量地理空间位置之间的距离。

了解何时使用哪种距离度量是非常重要的,这需要对数据的特点以及所使用的算法有深入的理解。在选择距离度量时,需要考虑数据的特征、数据的分布、数据的维度以及算法的特性,以便得到更好的模型性能。

在这里插入图片描述

1. 欧氏距离

在这里插入图片描述
欧氏距离是最好的解释是连接两点之间的线段的长度。公式相当直接,因为距离是通过使用勾股定理计算点的笛卡尔坐标得到的。
D ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 ) D(x,y)=\sqrt{\sum_{i=1}^{n}(x_{i}-y_{i})^{2})} D(x,y)=i=1n(xiyi)2)

劣势

尽管它是一种常见的距离度量,殴氏距离不是尺度不变的,这意味着计算出的距离可能会因特征的单位而产生偏差。通常,在使用这种距离度量之前需要对数据进行归一化。

此外,随着数据维度的增加,欧几里得距离变得越不有用。这与维度的诅咒有关,它涉及到高维空间并不像在2维或3维空间中直观预期的那样行动的概念。

用例

当拥有低维数据且向量的大小对测量很重要时,欧氏距离效果很好。如果在使用低维数据的kNN和HDBSCAN上使用欧几里得距离,方法会立即显示出很好的结果。

尽管已经开发了许多其他度量来弥补欧几里得距离的劣势,但由于使用它有很好的理由,它仍然是最常用的距离度量之一。它非常直观易用,简单易实现,并且在许多用例中显示出很好的结果。

Python示例

import numpy as np

def euclidean_distance(point1, point2):
    """
    计算两点之间的欧氏距离
    
    参数:
    point1: 第一个点的坐标,例如 [x1, y1, z1, ...]
    point2: 第二个点的坐标,例如 [x2, y2, z2, ...]
    
    返回值:
    两点之间的欧氏距离
    """
    point1 = np.array(point1)
    point2 = np.array(point2)
    distance = np.linalg.norm(point1 - point2)
    return distance

# 示例
point1 = [1, 2, 3]
point2 = [4, 5, 6]
distance = euclidean_distance(point1, point2)
print("两点之间的欧氏距离为:", distance)

2. 余弦相似度

在这里插入图片描述
余弦相似度经常被用来解决欧几里得距离在高维性问题上的问题。余弦相似度简单地说是两个向量之间夹角的余弦。它也有向量归一化后相同内积的向量。

两个方向完全相同的向量具有余弦相似度为1,而两个完全相反的向量具有相似度为-1。请注意,它们的幅度不重要,因为这是方向的度量。
D ( x , y ) = c o s ( θ ) = x ⋅ y ∣ ∣ x ∣ ∣ ∣ ∣ y ∣ ∣ D(x,y)=c o s(\theta)=\frac{x\cdot y}{\left||x|\right|\left||y|\right|} D(x,y)=cos(θ)=xyxy

劣势

余弦相似度的一个主要劣势是不考虑向量的幅度,只考虑它们的方向。在实践中,这意味着差异值没有被完全考虑在内。如果以推荐系统为例,那么余弦相似度不考虑不同用户之间评分尺度的差异。

用例

当拥有高维数据且向量的幅度不重要时,经常使用余弦相似度。在文本分析中,当数据由词频表示时,这种度量经常被使用。例如,当一个词在一个文档中出现的频率比另一个文档高时,这并不一定意味着一个文档与那个词更相关。可能是文档长度不均匀,计数的幅度不那么重要。然后,最好使用余弦相似度,它不考虑幅度。

Python示例

import numpy as np

def cosine_similarity(vector1, vector2):
    """
    计算两个向量之间的余弦相似度
    
    参数:
    vector1: 第一个向量,例如 [x1, y1, z1, ...]
    vector2: 第二个向量,例如 [x2, y2, z2, ...]
    
    返回值:
    两个向量之间的余弦相似度
    """
    dot_product = np.dot(vector1, vector2)
    norm_vector1 = np.linalg.norm(vector1)
    norm_vector2 = np.linalg.norm(vector2)
    similarity = dot_product / (norm_vector1 * norm_vector2)
    return similarity

# 示例
vector1 = [1, 2, 3]
vector2 = [4, 5, 6]
similarity = cosine_similarity(vector1, vector2)
print("两个向量之间的余弦相似度为:", similarity)

3. 汉明距离

在这里插入图片描述
汉明距离是两个向量之间不同值的数量。它通常用于比较两个等长的二进制字符串。它也可以用来比较字符串,通过计算彼此不同的字符数量来衡量它们之间的相似性。

劣势

当出现两个向量长度不相等时,汉明距离很难使用。理想的状态希望比较两个行长的向量,以便了解哪些位置不匹配。因此,当幅度是一个重要的度量时,不建议使用汉明距离度量。

用例

典型的用例包括在计算机网络传输数据时的错误校正/检测。它可以用来确定二进制词中扭曲的位数,作为估计错误的一个方法。此外,还可以使用汉明距离来衡量分类变量之间的距离。

Python示例

def hamming_distance(string1, string2):
    """
    计算两个等长字符串之间的汉明距离
    
    参数:
    string1: 第一个字符串
    string2: 第二个字符串
    
    返回值:
    两个字符串之间的汉明距离
    """
    if len(string1) != len(string2):
        raise ValueError("字符串长度不相等")
    
    distance = 0
    for char1, char2 in zip(string1, string2):
        if char1 != char2:
            distance += 1
    
    return distance

# 示例
string1 = "101010"
string2 = "111000"
distance = hamming_distance(string1, string2)
print("两个字符串之间的汉明距离为:", distance)

4. 曼哈顿距离

在这里插入图片描述

曼哈顿距离是计算实值向量之间的距离。想象一下描述棋盘上物体的向量。那么曼哈顿距离指的是两个向量之间的距离,如果它们只能直角移动。在计算距离时不涉及对角线移动。
D ( x , y ) = ∑ i = 1 k ∣ x i − y i ∣ D(x,y)=\sum_{i=1}^{k}\vert x_{i}-y_{i}\vert D(x,y)=i=1kxiyi

劣势

尽管曼哈顿距离似乎对高维数据工作得很好,但它是一种比欧氏距离不太直观的度量,特别是在高维数据中使用时。此外,它比氏更有可能给出更高的距离值,因为它不采取最短路径。这不一定会引起问题,但这是应该考虑的事情。

用例

当数据集具有离散和/或二元属性时,曼哈顿似乎效果很好,因为它考虑了在这些属性的值内实际可能采取的路径。以欧氏距离为例,当两个向量之间画一条直线时,在现实中这可能并不可能。

Python示例

def manhattan_distance(point1, point2):
    """
    计算两点之间的曼哈顿距离
    
    参数:
    point1: 第一个点的坐标,例如 [x1, y1]
    point2: 第二个点的坐标,例如 [x2, y2]
    
    返回值:
    两点之间的曼哈顿距离
    """
    if len(point1) != len(point2):
        raise ValueError("点的维度不相等")
    
    distance = sum(abs(x1 - x2) for x1, x2 in zip(point1, point2))
    return distance

# 示例
point1 = [1, 2]
point2 = [4, 6]
distance = manhattan_distance(point1, point2)
print("两点之间的曼哈顿距离为:", distance)

5. 切比雪夫距离

在这里插入图片描述
切比雪夫距离被定义为两个向量在任何坐标维度上的差异的最大值。换句话说,它只是沿一个轴的最大距离。由于其性质,它通常被称为棋盘距离,因为国王从一个方格移动到另一个方格所需的最小步数等于切比雪夫距离。

劣势

切比雪夫通常用于非常特定的用例,这使得它难以像欧氏距离或余弦相似度那样用作通用距离度量。因此,只有在绝对确定它适合你的例时,才建议使用它。

用例

如前所述,切比雪夫距离可以用来提取国王从一个方格移动到另一个方格所需的最小步数。此外,它在允许无限制8向移动的游戏中可能是一个有用的度量。实际上,切比雪夫距离通常用于仓库物流,因为它与吊车移动物体所需的时间非常相似。

Python示例

def chebyshev_distance(point1, point2):
    """
    计算两点之间的切比雪夫距离
    
    参数:
    point1: 第一个点的坐标,例如 [x1, y1]
    point2: 第二个点的坐标,例如 [x2, y2]
    
    返回值:
    两点之间的切比雪夫距离
    """
    if len(point1) != len(point2):
        raise ValueError("点的维度不相等")
    
    distance = max(abs(x1 - x2) for x1, x2 in zip(point1, point2))
    return distance

# 示例
point1 = [1, 2]
point2 = [4, 6]
distance = chebyshev_distance(point1, point2)
print("两点之间的切比雪夫距离为:", distance)

6. 闵可夫斯基距离

在这里插入图片描述

闵可夫斯基距离比大多数度量更为复杂。它是一个在范数向量空间(n维实数空间)中使用的度量,这意味着它可以在一个可以表示为具有长度的向量的空间中使用。

这个度量有三个要求:

  • 零向量 —— 零向量的长度为零,而其他每个向量的长度都为正。例如,如果从一个地方到另一个地方,那么这个距离总是正的。然而,如果从一个地方到它自己,那么这个距离是零。

  • 标量因子 —— 当你将向量乘以一个正数时,它的长度会改变,同时保持其方向。例如,如果我们在一个方向上走一定的距离,然后加上相同的距离,方向不会改变。

  • 三角不等式 —— 两点之间最短的距离是一条直线。

闵可夫斯基距离的公式如下:
D ( x , y ) = ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 p D(x,y)=\left(\sum_{i=1}^{n}\left|x_{i}-y_{i}\right|^{p}\right)^{\frac{1}{p}} D(x,y)=(i=1nxiyip)p1

最有趣的是这个度量中参数p的使用。我们可以使用这个参数来调整距离度量,使其密切类似于其他度量。

p的常见值是:

  • p=1 — 曼哈顿距离

  • p=2 — 欧几里得距离

  • p=∞ — 切比雪夫距离

劣势

闵可夫斯基具有它们所代表的距离度量的相同劣势,因此非常好地理解像曼哈顿、欧氏和切比雪夫这样的度量是非常重要的。此外,参数p实际上可能很难处理,因为根据用例找到正确的值可能在计算上效率低下。

用例

p的优点是可以迭代它并找到最适合用例的距离度量。如果对p和许多距离度量非常熟悉,它允许你在距离度量上拥有巨大的灵活性,这可能是一个巨大的好处。

Python示例

import numpy as np

def minkowski_distance(point1, point2, p):
    """
    计算两点之间的闵可夫斯基距离
    
    参数:
    point1: 第一个点的坐标,例如 [x1, y1]
    point2: 第二个点的坐标,例如 [x2, y2]
    p: 距离的参数
    
    返回值:
    两点之间的闵可夫斯基距离
    """
    if len(point1) != len(point2):
        raise ValueError("点的维度不相等")
    
    distance = np.power(np.sum(np.power(np.abs(np.array(point1) - np.array(point2)), p)), 1/p)
    return distance

# 示例
point1 = [1, 2]
point2 = [4, 6]
p = 2
distance = minkowski_distance(point1, point2, p)
print("两点之间的闵可夫斯基距离为:", distance)

7. 杰卡德系数

在这里插入图片描述
杰卡德指数(或并集上的交集)是用于计算样本集的相似性和多样性的度量。它是交集的大小除以并集的大小。在实践中,它是集合之间相似实体的总数除以实体的总数。例如,如果两个集合有1个共同实体和总共5个不同的实体,那么杰卡德指数将是1/5 = 0.2。

要计算杰卡德距离,我们只需从1中减去杰卡德指数:
D ( x , y ) = 1   −     ∣ x   ∩ y ∣ ∣ y   ∪   x ∣ D(x,y)=1\,-\,\frac{\,\left|x\,\cap y\right|}{\left|y\,\cup\,x\right|} D(x,y)=1yxxy

劣势

杰卡德指数的一个主要劣势是它受数据大小的影响很大。大型数据集可能会对指数产生很大影响,因为它可能会显著增加并集,同时保持交集相似。

用例

杰卡德指数通常用于二元或二值化数据的应用程序。例如,当有一个深度学习模型预测图像的某个部分,例如l图像中的汽车时,杰卡德指数可以用来计算给定真实标签的预测部分的准确性。同样,它可以用于文本相似性分析,以衡量文档之间有多少单词选择重叠。因此,它可以用于比较模式集。

Python示例

def jaccard_coefficient(set1, set2):
    """
    计算两个集合之间的杰卡德系数
    
    参数:
    set1: 第一个集合,例如 {element1, element2, ...}
    set2: 第二个集合,例如 {element3, element4, ...}
    
    返回值:
    两个集合之间的杰卡德系数
    """
    intersection = len(set1.intersection(set2))
    union = len(set1.union(set2))
    coefficient = intersection / union
    return coefficient

# 示例
set1 = {1, 2, 3}
set2 = {2, 3, 4}
jaccard_coeff = jaccard_coefficient(set1, set2)
print("两个集合之间的杰卡德系数为:", jaccard_coeff)

8.哈弗辛距离

在这里插入图片描述
哈弗辛距离是基于两点的经度和纬度计算球体表面上的距离。它与欧几里得距离非常相似,因为它计算的是两点之间的最短直线。主要的区别在于,这里假设的两点位于球体上,因此不存在直线路径。
d = 2 r a r c s i n ( s i n 2 ( φ 2 − φ 1 2 ) + c o s ( φ 1 ) c o s ( φ 2 ) s i n 2 ( λ 2 − λ 1 2 ) ) d=2r a r c s i n\left({\sqrt{s i n^{2}\left({\frac{\varphi_{2}-\varphi_{1}}{2}}\right)+c o s(\varphi_{1})c o s(\varphi_{2})s i n^{2}\left({\frac{\lambda_{2}-\lambda_{1}}{2}}\right)}}\right) d=2rarcsin(sin2(2φ2φ1)+cos(φ1)cos(φ2)sin2(2λ2λ1) )

劣势

这种距离度量的一个缺点是它假设点位于球体上。实际上,这种情况很少见,例如,地球并不是完美的圆形,这可能使得在某些情况下的计算变得困难。相反,值得关注的是文森特距离(Vincenty distance),它假设的是椭球体而非球体。

用例

哈弗辛距离经常用于导航。例如,可以使用它来计算两个国家之间的飞行距离。需要注意的是,如果本身距离不是很远,它就不那么适用。在这种情况下,曲率的影响不会那么大。

Python示例

import math

def haversine(lat1, lon1, lat2, lon2):
    """
    计算地球上两点之间的哈弗辛距离
    
    参数:
    lat1: 第一个点的纬度
    lon1: 第一个点的经度
    lat2: 第二个点的纬度
    lon2: 第二个点的经度
    
    返回值:
    两点之间的哈弗辛距离(单位为千米)
    """
    # 将经度和纬度转换为弧度
    lat1_rad = math.radians(lat1)
    lon1_rad = math.radians(lon1)
    lat2_rad = math.radians(lat2)
    lon2_rad = math.radians(lon2)
    
    # 使用哈弗辛公式计算距离
    dlon = lon2_rad - lon1_rad
    dlat = lat2_rad - lat1_rad
    a = math.sin(dlat / 2) ** 2 + math.cos(lat1_rad) * math.cos(lat2_rad) * math.sin(dlon / 2) ** 2
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
    radius_of_earth = 6371  # 地球的半径,单位为千米
    distance = radius_of_earth * c
    
    return distance

# 示例
latitude1 = 52.2296756
longitude1 = 21.0122287
latitude2 = 52.406374
longitude2 = 16.9251681
distance = haversine(latitude1, longitude1, latitude2, longitude2)
print("两点之间的哈弗辛距离为:", distance, "千米")

9. 索伦森-戴斯指数

在这里插入图片描述
索伦森-戴斯指数与杰卡德指数非常相似,它用于衡量样本集的相似性和多样性。尽管它们的计算方式相似,但索伦森-戴斯指数更为直观,因为它可以被视为两集合之间重叠的百分比,这是一个介于0和1之间的值。

劣势

与杰卡德指数一样,这两种指数都过分强调了那些几乎没有或根本没有真实正集的集合的重要性。结果,它可能会主导在多个集合上取平均分的情况。它将每个项目的重要性与相关集合的大小成反比,而不是平等对待。

用例

索伦森-戴斯指数的用例与杰卡德指数相似,如果不是完全相同的话。你通常会在图像分割任务或文本相似性分析中发现它被使用。

Python示例

def sorensen_dice_coefficient(set1, set2):
    """
    计算两个集合之间的索伦森-戴斯指数
    
    参数:
    set1: 第一个集合,例如 {element1, element2, ...}
    set2: 第二个集合,例如 {element3, element4, ...}
    
    返回值:
    两个集合之间的索伦森-戴斯指数
    """
    intersection = len(set1.intersection(set2))
    total_elements = len(set1) + len(set2)
    coefficient = 2 * intersection / total_elements
    return coefficient

# 示例
set1 = {1, 2, 3}
set2 = {2, 3, 4}
sorensen_dice = sorensen_dice_coefficient(set1, set2)
print("两个集合之间的索伦森-戴斯指数为:", sorensen_dice)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux在使用重定向写入文件时(使用标准C库函数时)使处理信号异常(延时)--问题分析

linux在使用重定向写入文件时(使用标准C库函数时)使处理信号异常(延时)–问题分析 在使用alarm函数进行序号处理测试的时候发现如果把输出重定向到文件里面会导致信号的处理出现严重的延迟(ubuntu18) #include <stdio.h> #include <stdlib.h> #include <unist…

API成网络攻击常见载体,如何确保API安全?

根据Imperva发布的《2024年API安全状况报告》&#xff0c;API成为网络攻击者的常见载体&#xff0c;这是因为大部分互联网流量&#xff08;71%&#xff09;都是API调用&#xff0c;API是访问敏感数据的直接途径。根据安全公司Fastly的一项调查显示&#xff0c;95%的企业在过去1…

线性数据结构----(数组,链表,栈,队列,哈希表)

线性数据结构 数组链表栈使用场景 队列应用场景 哈希表特点哈希函数&#xff0c;哈希值&#xff0c;哈希冲突键值对 Entry 开放寻址法和拉链法 参考文档 数组 数组(Array) 是一种很常见的数据结构。由相同类型的元素组成&#xff0c;并且是使用一块连续的内存来存储的。 在数组…

模板方法模式(继承的优雅使用)

目录 前言 UML plantuml 类图 实战代码 AbstractRoutingDataSource DynamicDataSource DynamicDataSourceContextHolder 前言 在设计类时&#xff0c;一般优先考虑使用组合来替代继承&#xff0c;能够让程序更加的灵活&#xff0c;但这并不意味着要完全抛弃掉继承。 …

使用Urllib库创建第一个爬虫程序

Urllib 是 Python 的标准库&#xff0c;它提供了一系列用于处理 URL 的函数和类&#xff0c;包括发送 HTTP 请求、处理 HTTP 响应、解析 URL 等功能。可以使用 urllib 来编写简单的网络爬虫。 request&#xff1a;它是最基本的HTTP请求模块&#xff0c;可以用来模拟发送请求。只…

CUDA安装 Windows版

目录 一、说明 二、安装工具下载 三、CUDA安装 四、cuDNN配置 五、验证安装是否成功 一、说明 windows10 版本安装 CUDA &#xff0c;首先需要下载两个安装包 CUDA toolkitcuDNN 官方教程 CUDA&#xff1a;https://docs.nvidia.com/cuda/cuda-installation-guide-micro…

面试题-Elasticsearch集群架构和调优手段(超全面)

对于Elasticsearch&#xff08;ES&#xff09;&#xff0c;我了解并有经验。在我之前的公司&#xff0c;我们有一个相对大型的ES集群&#xff0c;以下是该集群的架构和一些调优手段的概述&#xff1a; 1. 集群架构 集群规模&#xff1a;我们的ES集群由15个节点组成&#xff0c…

论文篇05-论文范文-论数据访问层设计技术及其应用(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

试题:论数据访问层设计技术及其应用 在信息系统的开发与建设中,分层设计是一种常见的架构设计方法,区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性,使设计结构清晰,便于提高复用能力和产品维护能力。一种常见的层次划分模型是将信息系统分…

MySQL之MVCC如何实现可重复读和提交读

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ &#x1f440;&#x1f440;&#x1f440; 个人博客&#xff1a;小奥的博客 &#x1f44d;&#x1f44d;&#x1f44d;&#xff1a;个人CSDN ⭐️⭐️⭐️&#xff1a;Github传送门 &#x1f379; 本人24应届生一枚&#xff0c;技术和水平有…

质量研发模型---V模型

质量研发模型&#xff08;V模型&#xff09; V模型强调软件开发的协作和速度&#xff0c;将软件实现和验证有机结合起来&#xff0c;在保证较高的软件质量情况下缩短开发周期。 通过对该模型的水平和垂直的关联和比较分析&#xff0c;理解软件开发和测试的关系&#xff0c;该模…

WebAR开发简介

WebAR 开发使企业能够以独特且高度有趣的方式向客户和员工提供信息。 它提供增强现实 (AR) 内容&#xff0c;人们在智能手机上将其视为视觉叠加。 然而&#xff0c;WebAR 可在手机的普通网络浏览器上运行&#xff0c;无需下载任何应用程序。 WebAR 的多种用途包括帮助零售和在…

AI大模型学习:引领智能时代的新篇章

AI大模型学习 随着人工智能技术的不断发展&#xff0c;大模型学习已经成为当前人工智能领域的热门话题。这项技术正在改变着我们对AI的认识和应用&#xff0c;同时也为未来的智能时代开启了新的篇章。 ### 什么是AI大模型学习&#xff1f; AI大模型学习指的是利用大规模数据…

可视化图表:柱状图,最直观的比较数据的方式。

可视化图表是一种将数据通过图形化的方式展示出来的工具&#xff0c;它可以帮助我们更直观地理解数据的分布、趋势和关系。其中&#xff0c;柱状图是最常见和常用的一种图表类型&#xff0c;它通过长方形的柱子来表示数据的大小。本文将介绍柱状图的定义和作用、数学原理、样式…

fl studio21.2中文版下载及使用基础教学

FL Studio 21.2.2是一款功能强大的音乐制作软件&#xff0c;也被广大用户称为“水果编曲”。这款软件支持简体中文和英语&#xff0c;适用于Windows 10/11&#xff08;仅限64位&#xff09;以及MacOS 10.13.6或更高版本的系统。 在FL Studio 21.2.2中&#xff0c;用户可以享受…

软考高级:软件构件与中间件技术概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

代码随想录训练营第58天 | LeetCode 739. 每日温度、​​​​​​LeetCode 496.下一个更大元素 I

目录 LeetCode 739. 每日温度 文章讲解&#xff1a;代码随想录(programmercarl.com) 视频讲解&#xff1a;单调栈&#xff0c;你该了解的&#xff0c;这里都讲了&#xff01;LeetCode:739.每日温度_哔哩哔哩_bilibili 思路 ​​​​​​LeetCode 496.下一个更大元素 I 文…

深入理解TCP/IP协议:网络通信的基石

提示&#xff1a;本系列文章重点学习TCP/IP协议 深入理解TCP/IP协议&#xff1a;网络通信的基石 简介一、TCP/IP协议的基本原理二、TCP/IP协议的工作机制三、TCP面向连接建立连接&#xff1a;断开连接&#xff1a; 四、分层传输五、TCP流量控制滑动窗口机制流量控制的工作流程优…

011、获取Revit设计选项

今天来一段简单的代码&#xff0c;获取Revit设计选项&#xff0c;来说说Dynamo一个比较常用的方法&#xff1a; FilteredElementCollector Methods 这个方法的很有用&#xff0c;很多图元的获取都要通过这种方式。 我们打开API手册&#xff0c;直接搜索FilteredElementCol…

暴力破解笔记

1 暴力破解简介 暴力破解&#xff1a; 蛮力攻击&#xff0c;又称为穷举攻击&#xff0c;或暴力破解&#xff0c;将密码进行逐个尝试验证&#xff0c;直到尝试出真正的密码为止。 暴力破解是指采用反复试错的方法并希望最终猜对&#xff0c;以尝试破解密码或用户名或找到隐藏的…

yolov5+pyside6+登录+用户管理目标检测可视化源码

一、软件简介 这是基于yolov5目标检测实现的源码&#xff0c;提供了用户登录功能界面&#xff1b; 用户需要输入正确的用户名和密码才可以登录。如果是超级管理员&#xff0c;可以修改普通用户的信息&#xff0c;并且在检测界面的右上角显示【管理用户】按钮。 支持图片、视频、…