#!/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]))