波比较函数

张博的博客 / 2024-03-02 / 原文

使用了局部贪心算法加横向损失. 目前我认为是最好的时序比较函数.

# 目前最先进的时序比较算法.
#算法保证  jisuan_diff(自己, 自己)=0, jisuan_diff(自己, 自己部分曲线水平偏移)= 0.5偏移的倍数.       jisuan_diff(自己, 其他)= 对应点都能找到最接近自己高度的对应点相减,并且水平也足够近.




#=====对于波的比较函数的优化
muban999=[0,1,1,0,-1,-1,-1,-1,-1,-1,-1,10]
beipipei999=[0,1,1,0,-1,0,1,1,1,1]
# beipipei999=[0,1,1,0,-1,-1,-1,-1,-1,-1,-1,1]

def jisuan_diff(b,m):
  print(1)
  changdu=0 # 横坐标的偏移 产生的diff
  gaodu=0  # 纵坐标的偏移 产生的diff
  kaishi=1
  saving=0
  jilu=0 # 记录上一个匹配成功的位置.
  for i in range(1,len(m)): # 模板第0个,跟被查数组0个假设已经对齐, 从索引1开始对齐.


      chagndu=3 #搜索范围. 总共有多长. 越小越局部贪婪, 越大越全局.#========这个需要自己根据曲线的形状来定义的超参数.

      tmpjuli=float('inf')
      
      for j in range(kaishi,kaishi+chagndu+1):
       if j<len(b):
        gaodu=abs(m[i]-b[j])
        if i!=1:
          changdu=(abs(abs(j-kaishi)-1))*0.5
        diff=gaodu+changdu
        if diff<tmpjuli:
          tmpjuli=diff
          jilu=j

      # 加上横坐标偏移惩罚: 移动一个格作为0惩罚.
      # tmpjuli+=abs(jilu-kaishi-1)
      kaishi=jilu
      print('模板索引点',i,'折线索引点',jilu,'两点diff',tmpjuli,'搜索起点',kaishi)
      saving+=tmpjuli
  return (saving+abs(b[0]-m[0]))/len(m)
sadfasdfadsfasd=jisuan_diff(beipipei999,muban999)
print(sadfasdfadsfasd)

import matplotlib.pyplot as plt
plt.plot(muban999,c='r')
plt.plot(beipipei999,c='g')
plt.savefig('sdfaasd.png')

模板索引点 1 折线索引点 1 两点diff 0 搜索起点 1
模板索引点 2 折线索引点 2 两点diff 0.0 搜索起点 2
模板索引点 3 折线索引点 3 两点diff 0.0 搜索起点 3
模板索引点 4 折线索引点 4 两点diff 0.0 搜索起点 4
模板索引点 5 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 6 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 7 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 8 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 9 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 10 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 11 折线索引点 6 两点diff 9.5 搜索起点 6
1.0416666666666667
PS D:\钞票安全线转码\RMB> & d:/Users/admin/miniconda3/python.exe d:/钞票安全
线转码/RMB/999.py
1
模板索引点 1 折线索引点 1 两点diff 0 搜索起点 1
模板索引点 2 折线索引点 2 两点diff 0.0 搜索起点 2
模板索引点 3 折线索引点 3 两点diff 0.0 搜索起点 3
模板索引点 4 折线索引点 4 两点diff 0.0 搜索起点 4
模板索引点 5 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 6 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 7 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 8 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 9 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 10 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 11 折线索引点 5 两点diff 10.0 搜索起点 5
1.0833333333333333
PS D:\钞票安全线转码\RMB> & d:/Users/admin/miniconda3/python.exe d:/钞票安全
线转码/RMB/999.py
1
模板索引点 1 折线索引点 1 两点diff 0 搜索起点 1
模板索引点 2 折线索引点 2 两点diff 0.0 搜索起点 2
模板索引点 3 折线索引点 3 两点diff 0.0 搜索起点 3
模板索引点 4 折线索引点 4 两点diff 0.0 搜索起点 4
模板索引点 5 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 6 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 7 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 8 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 9 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 10 折线索引点 4 两点diff 0.5 搜索起点 4
模板索引点 11 折线索引点 6 两点diff 9.5 搜索起点 6

image