【问题标题】:Efficiently determining the similarity between two graphs有效地确定两个图之间的相似性
【发布时间】:2021-06-03 18:25:42
【问题描述】:

我有两个“组”图(即笛卡尔平面上的“xy”图)。所有的形状都相似——实际上是噪声,除了在每个水平轴上某个未知点的“峰值”。例如:

实际上,这些图由两个C 样式的数组(类型为float)组成,分别存储沿xy 轴的点。我的目标是将每个“集合”中的图表配对,以使每对中的峰值相对于水平轴尽可能接近地对齐(也就是说,我想遍历一个“集合”并找到“最佳匹配”从第二个“集合”)。我不关心峰的“宽度”,只是他们“对齐良好”。

在实践中,我正在处理数十万个这样的图表,并且需要在时间上有效地“配对”它们。我尝试了一些事情,例如根据它们的 xy 坐标的平均值对图表进行排序,但最终没有得到“很好对齐”的对(我知道更好的配对是可能的)。

例如,这个配对不是很“对齐”(这对由一个图形组成,黄色,配对,蓝色):

我们可以假设这些峰几乎总是具有大致相同的“高度”。图表的横轴范围大致相同,但“长度”完全相同。

编辑:

澄清一下,我知道图表的峰值大约会落在 x 轴上的少数几个点之一(例如,它们可能大致以x=5x=10 或@987654333 为中心@)。不幸的是,我事先不知道 where,也不知道有多少“点”(尽管大约 3 或 4)。目标是根据图表(大致)集中在哪个点对图表进行分组。

【问题讨论】:

  • 您可能需要进一步了解您对“良好对齐”的定义。定量地说,是什么让两个图“对齐”?是否像在每个图上找到最大值并比较这些最大值的位置一样简单?是否涉及频率元素?你关心局部最大值(不是全局最大值的峰值)吗?
  • 顺便说一句,如果它们真的是,我会称它们为“系列”或“时间序列”而不是“图表”。图表是数据的可视化,并没有指定数据在一个轴上是单调的。 “图”在这里也很模糊:节点+边等。

标签: algorithm math signal-processing physics


【解决方案1】:

Cross-correlation 可能足以满足您的描述。您可以将一个滑动到另一个对匹配点处的值的乘积求和以找到最佳对齐,或者如果您描述您有几个已知的峰值将出现的点,创建那些已知的图形曲线然后滑动它们向左或向右一些增量,以查看它们与哪个峰对齐。

至于效率,是的,这听起来很慢:数以千计的产品,但现代 CPU 在处理这种“愚蠢”算法方面速度惊人,并且可能能够对代码进行矢量化以快速执行。

【讨论】:

    猜你喜欢
    • 2011-05-03
    • 2023-03-11
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多