gpt4 book ai didi

python - 测量两个不规则图之间的相似性

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:08 37 4
gpt4 key购买 nike

我有两条不规则的线作为 [x,y] 坐标的列表,其中有峰和谷。列表的长度可能略有不同(不相等)。我想测量它们的相似性,以便检查峰谷(具有相似深度或高度)的出现是否以适当的间隔出现并给出相似性度量。我想在 Python 中执行此操作。是否有任何内置函数可以执行此操作?

enter image description here enter image description here

最佳答案

我不知道 Python 中有任何内置函数可以执行此操作。

我可以为您提供 Python 生态系统中您可以使用的可能功能的列表。这绝不是完整的功能列表,可能还有很多我不知道的方法。

如果数据是有序的,但不知道哪个数据点在前,哪个数据点在后:

  1. 使用有向豪斯多夫距离

如果数据是有序的,并且您知道第一点和最后一点是正确的:

  1. 离散 Fréchet 距离 *
  2. 动态时间扭曲 (DTW) *
  3. 部分曲线映射 (PCM) **
  4. 曲线长度距离度量(使用从开始到结束的弧长距离)**
  5. 两条曲线之间的面积**

* 一般用于各种机器学习任务的数学方法

** 我用来识别独特 Material 滞后响应的方法

首先假设我们有两个完全相同的随机 X Y 数据。请注意,所有这些方法都将返回零。如果没有,您可以从 pip 安装相似性度量。

import numpy as np
from scipy.spatial.distance import directed_hausdorff
import similaritymeasures
import matplotlib.pyplot as plt

# Generate random experimental data
np.random.seed(121)
x = np.random.random(100)
y = np.random.random(100)
P = np.array([x, y]).T

# Generate an exact copy of P, Q, which we will use to compare
Q = P.copy()

dh, ind1, ind2 = directed_hausdorff(P, Q)
df = similaritymeasures.frechet_dist(P, Q)
dtw, d = similaritymeasures.dtw(P, Q)
pcm = similaritymeasures.pcm(P, Q)
area = similaritymeasures.area_between_two_curves(P, Q)
cl = similaritymeasures.curve_length_measure(P, Q)

# all methods will return 0.0 when P and Q are the same
print(dh, df, dtw, pcm, cl, area)

打印输出为0.0, 0.0, 0.0, 0.0, 0.0, 0.0这是因为曲线 P 和 Q 完全一样!

现在假设 P 和 Q 不同。

# Generate random experimental data
np.random.seed(121)
x = np.random.random(100)
y = np.random.random(100)
P = np.array([x, y]).T

# Generate random Q
x = np.random.random(100)
y = np.random.random(100)
Q = np.array([x, y]).T

dh, ind1, ind2 = directed_hausdorff(P, Q)
df = similaritymeasures.frechet_dist(P, Q)
dtw, d = similaritymeasures.dtw(P, Q)
pcm = similaritymeasures.pcm(P, Q)
area = similaritymeasures.area_between_two_curves(P, Q)
cl = similaritymeasures.curve_length_measure(P, Q)

# all methods will return 0.0 when P and Q are the same
print(dh, df, dtw, pcm, cl, area)

打印输出为0.107、0.743、37.69、21.5、6.86、11.8根据每种方法量化 P 与 Q 的差异。

您现在有很多方法可以比较两条曲线。我将从 DTW 开始,因为它已在许多看起来像您上传的数据的时间序列应用程序中使用。

我们可以通过以下代码可视化 P 和 Q 的样子。

plt.figure()
plt.plot(P[:, 0], P[:, 1])
plt.plot(Q[:, 0], Q[:, 1])
plt.show()

Two random paths in the XY space

关于python - 测量两个不规则图之间的相似性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32600733/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com