识别左侧由 delta 链接的簇,右侧由不同 delta 链接的簇

2024-05-26

考虑排序后的数组a:

a = np.array([0, 2, 3, 4, 5, 10, 11, 11, 14, 19, 20, 20])

如果我指定了左增量和右增量,

delta_left, delta_right = 1, 1

这就是我期望的集群分配方式:

#   a = [ 0  .  2  3  4  5  .  .  .  . 10 11  .  . 14  .  .  .  . 19 20
#                                         11                         20
#
#                                     [10--|-12]                 [19--|-21]
#           [1--|--3]                 [10--|-12]                 [19--|-21]
#    [-1--|--1]   [3--|--5]         [9--|-11]                 [18--|-20]
#   +--+--|--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
#              [2--|--4]                       [13--|-15]
#
#         │    ╰──┬───╯                 ╰┬─╯        │              ╰┬─╯
#         │   cluster 2                Cluster 3    │           Cluster 5
#     Cluster 1                                 Cluster 4

NOTE:尽管有间隔[-1, 1]与 共享优势[1, 3],两个区间都不包含相邻点,因此不构成连接它们各自的簇。

假设簇分配存储在名为的数组中clusters,我希望结果看起来像这样

print(clusters)
[1 2 2 2 2 3 3 3 4 5 5 5]

但是,假设我将左右增量更改为不同的:

delta_left, delta_right = 2, 1

这意味着对于值为x它应该与区间中的任何其他点组合[x - 2, x + 1]

#   a = [ 0  .  2  3  4  5  .  .  .  . 10 11  .  . 14  .  .  .  . 19 20
#                                         11                         20
#
#                                   [9-----|-12]              [18-----|-21]
#        [0-----|--3]               [9-----|-12]              [18-----|-21]
# [-2-----|--1][2-----|--5]      [8-----|-11]              [17-----|-20]
#   +--+--|--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
#           [1 ----|--4]                    [12-----|-15]
#
#         ╰─────┬─────╯                 ╰┬─╯        │              ╰┬─╯
#           cluster 1                Cluster 2      │           Cluster 4
#                                               Cluster 3

NOTE:尽管有间隔[9, 12]与 共享优势[12, 15],两个区间都不包含相邻点,因此不构成连接它们各自的簇。

假设簇分配存储在名为的数组中clusters,我希望结果如下所示:

print(clusters)
[1 1 1 1 1 2 2 2 3 4 4 4]

我们将利用np.searchsorted https://docs.scipy.org/doc/numpy/reference/generated/numpy.searchsorted.html和寻找簇边缘的逻辑。

首先,让我们仔细看看什么np.searchsorted does:

查找排序数组 a 中的索引,这样,如果 v 中的相应元素插入到索引之前,则 a 的顺序将被保留。

我要做的是执行np.searchsorted with a using a - delta_left。 Let's look at that fordelta_left = 1

# a =
# [ 0  2  3  4  5 10 11 11 14 19 20 20]
# 
# a - delta_left
# [-1  1  2  3  4  9 10 10 13 18 19 19]
  • -1会插入位置0保持秩序
  • 1将被插入到位置1维持秩序
  • 2将被插入到位置1也表明2可能位于同一个集群中1
  • 3将被插入到位置2表明3可能位于同一个集群中2
  • 等等等等

我们注意到,只有当一个元素较少的增量插入到其当前位置时,我们才会考虑开始一个新的簇。

我们对右侧再次执行此操作,但有所不同。不同之处在于,默认情况下,如果一堆元素相同,np.searchsorted假设插入到值的前面。为了识别簇的末端,我想要在相同的元素之后插入。因此我将使用参数side='right'

如果“left”,则给出找到的第一个合适位置的索引。如果“正确”,则返回最后一个此类索引。如果没有合适的索引,则返回 0 或 N(其中 N 是 a 的长度)。

现在是逻辑。仅当先前的簇已结束时,簇才能开始,第一个簇除外。然后我们将考虑第二个结果的移动版本np.searchsorted


现在让我们定义我们的函数

def delta_cluster(a, dleft, dright):
    # use to track whether searchsorted results are at correct positions
    rng = np.arange(len(a))

    edge_left = a.searchsorted(a - dleft)
    starts = edge_left == rng

    # we append 0 to shift
    edge_right = np.append(0, a.searchsorted(a + dright, side='right')[:-1])
    ends = edge_right == rng

    return (starts & ends).cumsum()

示范

左、右增量分别等于 1 和 1

print(delta_cluster(a, 1, 1))

[1 2 2 2 2 3 3 3 4 5 5 5]

左、右增量分别等于 2 和 1

print(delta_cluster(a, 2, 1))

[1 1 1 1 1 2 2 2 3 4 4 4]

额外学分
如果什么a没有排序吗?
我将利用从中学到的信息这个帖子 https://stackoverflow.com/q/41394595/2336654

def delta_cluster(a, dleft, dright):

    s = a.argsort()

    size = s.size

    if size > 1000:
        y = np.empty(s.size, dtype=np.int64)
        y[s] = np.arange(s.size)
    else:
        y = s.argsort()

    a = a[s]

    rng = np.arange(len(a))

    edge_left = a.searchsorted(a - dleft)
    starts = edge_left == rng

    edge_right = np.append(0, a.searchsorted(a + dright, side='right')[:-1])
    ends = edge_right == rng

    return (starts & ends).cumsum()[y]

示范

b = np.random.permutation(a)
print(b)

[14 10  3 11 20  0 19 20  4 11  5  2]

print(delta_cluster(a, 2, 1))

[1 1 1 1 1 2 2 2 3 4 4 4]

print(delta_cluster(b, 2, 1))

[3 2 1 2 4 1 4 4 1 2 1 1]

print(delta_cluster(b, 2, 1)[b.argsort()])

[1 1 1 1 1 2 2 2 3 4 4 4]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

识别左侧由 delta 链接的簇,右侧由不同 delta 链接的簇 的相关文章

  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • “UITableView”类型的值没有成员“sectionHeaderTopPadding”

    为什么我在 Xcode 12 4 模拟器 ios 14 x 中收到以下代码的构建错误 if available iOS 15 0 myTableView sectionHeaderTopPadding 0 0 error here 错误是
  • 如何将内容放在article.js之上/之上

    So I am trying to create a navigation and footer in the body of the website but the particle js keeps coming over those
  • 使用 Objective-C 将 XMP 数据嵌入到 PNG

    我需要将自定义 XMP 文件嵌入到 iOS 应用程序中的 PNG 中 到目前为止 我能做的就是编译 Adob e XMP 工具包 生成 Xcode 项目 然后正确编译该项目 从那里我不知道如何在我的 Xcode 项目中使用该库以及如何使用它
  • Xuggler 未转换 .webm 文件?

    我只是尝试使用 Xuggler 将 mov 文件转换为 webm 这应该可以工作 因为 FFMPEG 支持 webm 文件 这是我的代码 IMediaReader reader ToolFactory makeReader home use
  • Apache mod_rewrite:仅当不在本地主机中时才强制 www

    我的 htaccess 中有以下内容来强制 URL 中包含 www RewriteCond HTTP HOST www RewriteRule http www HTTP HOST 1 R 301 L 如果不在本地主机上 我该如何应用它 我
  • 如何使 VS Code 建议片段位于建议列表的顶部?

    我想在 VS Code 中使用代码片段 但是当我输入时 例如 for在 javascript 文件中 IntelliSense 不建议片段 for loop 我需要手动滚动下拉列表并选择它 有没有办法让 VS Code 首先建议片段 UPD
  • 如何提高Canvas渲染性能?

    我必须画很多Shape http msdn microsoft com en us library system windows shapes shape aspx 约 1 20 万 作为 Canvas 2 的子级 我在 WPF 应用程序中
  • 在 Grails 中使用 Spring-Security 前/后注释

    我正在使用 Grails Spring Security 插件 Spring Security Core 1 0 1 它又使用 spring security 3 0 2 RELEASE 开发 Grails 版本 1 3 3 Web 应用程
  • C# 的 user32 和内核方法列表 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有一个很好的清单来说明我们可以从中进口什么user32 dll and kernel dll并在 C 中使用 我是 Windows A
  • Cassandra cqlsh - 如何显示时间戳列的微秒/毫秒?

    我正在插入带有时间戳列的 Cassandra 表 我的数据具有微秒精度 因此时间数据字符串如下所示 2015 02 16T18 00 03 234 00 00 但是 在 cqlsh 中 当我运行选择查询时 微秒数据不会显示 我只能看到精确到
  • JavaFX颜色选择器的语言

    有没有办法改变语言ColorPicker的文本 例如 自定义颜色 当前颜色 新颜色 色相 饱和度 亮度 不透明度 保存 使用 取消 编辑 以下答案适合那些需要更多内容的人exotic语言 如果您使用其中之一 de es fr it ja k
  • 是否可以在 proc 中查看 ruby​​ 代码?

    p Proc new puts ok 是否可以在过程中看到 ruby 代码 inspect返回内存位置 puts p inspect
  • cmake 包括其他目录中的 h 文件

    我在 cmake 项目下进行测试时遇到问题 我的项目是这样安排的 TerrainMap PointAccumulator heightQuadGrid Test 在 TerrainMap 目录中 CMakeLists txt 文件简单地概述
  • 捆绑 pathsForResourcesOfType:inDirectory:

    在我的应用程序中 我有很多图片 分为几个类别 以下是项目内和我的硬盘上的应用程序树 ApplicationName Resources Thumbs Images Buttons Default png 在拇指文件夹中 我有很多 png 文
  • Azure 表存储分区键

    两个有些相关的问题 1 是否有办法获取表实体所在服务器的ID 2 使用 GUID 能否为我提供最佳的分区键分布 如果没有 那又会怎样呢 几周来我们一直在为表存储性能而苦苦挣扎 简而言之 这确实很糟糕 但我们很早就意识到使用随机分区键会将实体
  • 添加鼠标事件到svg ,检测网格悬停

    我有一个有点复杂的问题 我正在尝试通过 svg 渲染网格 然后将事件侦听器添加到网格中 目前我正在通过渲染网格
  • Smarty 3 如何与 Zend Framework 2 一起使用?

    我很久以前就使用过 PHP5 目前正在尝试刷新我的知识 并通过 Zend Framework 2 和 Smarty 3 的知识来增强它 以实现一个可能的项目 我目前正在尝试弄清楚如何使用 Smarty 3 作为 Zend Framework
  • 如何在PropertyGrid中自定义绘制GridItem?

    我想以与所有者在 ListView 详细信息 和其他控件中绘制项目类似的方式在 PropertyGrid 中绘制属性值 如果将属性声明为 Color 类型 则其值将使用字符串描述旁边的颜色样本来绘制 如果属性是图像类型 则在字符串描述旁边绘
  • SQL 执行计划是基于架构还是数据,或者两者兼而有之?

    我希望这个问题不太明显 我已经找到了很多关于解释执行计划的好信息 但有一个问题我还没有找到答案 该计划 更具体地说是相对 CPU 成本 仅基于架构 还是数据库中当前的实际数据 我尝试对我的产品数据库中需要索引的位置进行一些分析 但正在使用我
  • 识别左侧由 delta 链接的簇,右侧由不同 delta 链接的簇

    考虑排序后的数组a a np array 0 2 3 4 5 10 11 11 14 19 20 20 如果我指定了左增量和右增量 delta left delta right 1 1 这就是我期望的集群分配方式 a 0 2 3 4 5 1