findcrest.py-20170802

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Jul 14 13:42:14 2017

@author: vicky
"""

from numpy import *;
import numpy as np;
import pandas as pd;

[n,p]=shape(y); #y=原始数据
#f=y的四个区间累计
f=np.zeros((n,p), dtype=np.int)
for i in range(0,n-3): 
    for j in range (0,p):
        f[i+3,j]=y[i,j]+y[i+1,j]+y[i+2,j]+y[i+3,j]

#f的一,二,三阶差分df1,df2,df3
df1=np.zeros((n,p), dtype=np.int)
df2=np.zeros((n,p), dtype=np.int)
df3=np.zeros((n,p), dtype=np.int)
for j in range (0,p):
    for i in range (0,n-1):
        df1[i+1,j]=f[i+1,j]-f[i,j]
    for i in range (0,n-2):
        df2[i+2,j]=f[i+2,j]-2*f[i+1,j]+f[i,j]
    for i in range(0,n-3):
        df3[i+3,j]=f[i+3,j]-3*f[i+2,j]+3*f[i+1,j]-f[i,j]

#起点波峰fmax=f的极大值且df2的局部极小值
fmax=np.zeros((n,p), dtype=np.int)
for j in range(0,p):
    for i in range(2,n-2):
        if (f[i,j]>=max(f[0:i-1,j]) and 
            f[i,j]>=max(f[i+1:i+2,j]) and 
            (df2[i,j]<=min(df2[i-1,j],df2[i+1,j]) or 
             df2[i+1,j]<=min(df2[i,j],df2[i+1,j])  or 
             df2[i-1,j]<=min(df2[i-1,j],df2[i-2,j]))):
            fmax[i,j]=f[i,j]
              
#ffmax=fmax去0,且8点以后
ffmax=np.zeros((n,p), dtype=np.int)
ffmax=[]

aList = [123, 'xyz', 'zara', 'abc']
newli=[]
newli.append(aList)
newli[[123, 'xyz', 'zara', 'abc']]
bList = [1,2,2,3]
newli.append(bList)
newli[[123, 'xyz', 'zara', 'abc'], [1, 2, 2, 3]]


ffmax=[];
for j in range(0,p):
    k=1
    for i in range(97,n): 
        if fmax[i,j]!=0 and fmax[i.j]>100:
            ffmax[i,j]=np.append(ffmax[i,j],fmax[i,j])
            ttmax[i,j]=i
            k=k+1

[n1,p1]=shape(ffmax)

#rffmax=波峰的增长率
rffmax=np.zeros((n1,p1), dtype=np.int)
for j in range(0,p1):
    for i in range(1,n1):
        rffmax[i,j]=abs(ffmax[i,j]-ffmax[i-1,j])/ffmax[i-1,j]

#找阈值的下界c:取每列第1行到最大值之间的最大值b,再取所有列计算结果的最大值max(b)
for j=1:p1 
    tm = find(rffmax(:,j)~=0);
    ma=find(rffmax(:,j)==max(rffmax(:,j)));
    if length(tm)>2
        b(j)=max(rffmax(1:ma-1,j));
    else
        b(j)=0;
    end
end
c=max(b);

#fffmax=增长率大于c的波峰
for j in range (0,p1): 
    tmp = np.where(rffmax[:,j]>c)[0]
    if length(tmp):
        fffmax[:,j] = ffmax[tmp[0],j]
    else:
        fffmax[:,j] = 0
        

#波峰fffmax在f中的位置tttmax(对应时间)
for j in range (0,p):
    tttmax[j]=min(find(f[:,j]==fffmax[j]))

#取tttmax往前4个内的最大值,tymax=对应到原始数据y的波峰位置,yymax=对应到原始数据y的波峰值
for j in range (0,p):
    if tttmax[j]>4:
        yymax[j]=max(y[tttmax[j]-4:tttmax[j],j])
        tymax[j]=min(find(y[:,j]==yymax[j]))

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值