zoukankan      html  css  js  c++  java
  • 基于numpy用滑窗方差的办法确定曲线拐点

    基于numpy用滑窗方差的办法确定曲线拐点

    需要确定一条抖动的数据的拐点

     1 #!usr/bin/env python
     2 #-*- coding:utf-8 -*-
     3 import matplotlib.pyplot as plt
     4 import numpy as np
     5 from scipy.signal import savgol_filter
     6 
     7 
     8 def val_eb(x,y,gap):
     9 # 转折点前后数据的离散程度相差很大,用这个离散差异拟合一条曲线,可能会有奇效。
    10 
    11 # 对每一个数据点(离散数据点拟合的曲线),向前向后分别取一段等长区间,分别求方差,用方差表示离散程度。用向前区间的方差/向后区间的方差,表示离散差异。
    12 
    13 # 每个数据点求得的离散差异形成的曲线如下,极值点x=790,正是转折点。
    14     col=[]
    15     y_col = []
    16     for i in range(gap, len(y) - gap):
    17         col.append(np.var(y[i - gap:i]) / np.var(y[i:i + gap]))
    18         y_col.append(i)
    19     return col,y_col
    20     pass
    21 
    22 
    23 def pl():
    24     n = 1000
    25     x = np.linspace(1,10,n)
    26 
    27     # 绘制曲线
    28     noise = np.random.normal(0, 0.008, 1000)
    29     # print(noise)
    30     y =np.tanh(x)+noise
    31 
    32     plt.plot(x,y,color="red",linewidth = '0.1')
    33 
    34     # x_smooth = savgol_filter(y, 101, 3)
    35     y = savgol_filter(y, 201, 3)
    36     # 方差求拐点
    37     v,y_v = val_eb(x,y,100)
    38     i = y_v[v.index(max(v))]
    39     print("the ebow is ",v,y_v[v.index(max(v))])
    40     print(x[i],y[i],x[i+1],y[i+1],x[i-1],y[i-1])
    41     # plt.plot(y_v,v,color="blue")
    42     plt.plot(x,y,color="green",linewidth = '0.1')
    43     plt.show()
    44 
    45 pl()

    能够识别到x=2.79为拐点,y=0.99

  • 相关阅读:
    一道经典的线程间通信的编程题
    Windows Live Writer代码插件整理
    Squeeze Excitation Module 对网络的改进分析
    IGC(Interleaved Group Convolutions)
    探秘移动网络模型
    sparse_softmax_cross_entropy_with_logits
    四行公式推完神经网络BP
    视觉跟踪:MDnet
    tensorflow API _ 6 (tf.gfile)
    tensorflow API _ 4 (Logging with tensorflow)
  • 原文地址:https://www.cnblogs.com/lx63blog/p/13723370.html
Copyright © 2011-2022 走看看