爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10847|回复: 6

[混合编程] [已收纳]python之编写序列升降分析函数

[复制链接]

新浪微博达人勋

发表于 2020-6-14 18:18:39 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 15195775117 于 2021-1-31 17:58 编辑

一、需求由来

平时的工作经常遇到序列分析的内容,
比如PM2.5从何时到何时升高了,从何时到何时又降低了,
为了实现自动分析,我写了个函数up_down(x),
原先我准备用wave()命名,搜索发现已经存在这个包了,不能重名。

二、python代码

# -*- coding: utf-8 -*-
"""
Created on Sun Jun 14 16:14:40 2020
该程序用于对序列的精确升降分析
曲线变化分为升、降、平三态,分别对应1、-1、0
结果格式:起始索引-终止索引-个数-升降平
处理参数x是一维向量
@author: Administrator
"""


import time
import numpy as np
import random


def up_down(x):
    dx=x[1:]-x[0:-1]
    #增大的都换成1:
    p=np.where(dx > 0)
    count=np.array(p).size
    if count > 0:
        dx[p]=1
    #减小的都换成-1:
    p=np.where(dx < 0)
    count=np.array(p).size
    if count > 0:
        dx[p]=-1
   
    n=len(dx)#元素个数
   
   
    book=[0,0,0,0]#用于堆叠每次的结果
   
    #以下循环有点绕,目的是把连续的升降平连到一起:
    count=0
    i=0
    while 1:
        i=i+count
        if i > n-1:
            break
        t=dx
        count=0
        for j in np.arange(i,n):
          if dx[j] != t:
              break
          count=count+1
        book=np.vstack((book,[i,i+count,count+1,t]))
   
    book=book[1:,:]#切割掉第一行
    n=int(book.size/4)#求升降段数目
   
    #字典中保存一个字符串用来说明含义
    note='book列含义:起始索引,终止索引,个数,升降平标识;有n段变化'
   
    re={'note':note,'book':book,'n':n}
    return re


if __name__ == "__main__":
    print('测试:')
    num=50000
    x=np.arange(0,num)
    random.shuffle(x)#洗牌算法
    t1=time.process_time()#记录函数开始的时间
    result=up_down(x)
    costime=time.process_time()-t1#函数运行的时间长度
    print('数据量=',num,'程序耗时{:.2f}秒'.format(costime))#精确到小数点后2位


三、计算效率


在我的电脑上5万个乱序数,需要0.77秒,虽然难以支持海量数据,但就我目前的需求是满足的




密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2020-6-14 18:54:47 | 显示全部楼层
五、性能扩展


该up_down()算法提供了对序列的“升降平”分析,但实际分析中我们时常会略去“平”,
比如序列[1,2,3,3,4,5,6]是“升-平-升”,一般会理解为整个升,
而且对于颗粒物、湿度这些量来说,“平”的状态真的很少,
如果颗粒物值存在多个平,很可能就是出错了,
(当然,CO和风速的数值较小,是存在较多的“平”的)
所以我准备再扩展出一个没有“平”的升降分析函数,见下一楼......
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-9-19 11:09:11 | 显示全部楼层
换新电脑么?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-9-19 12:19:49 | 显示全部楼层

最近没这个打算
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-9-19 14:22:02 | 显示全部楼层

来众筹啊
你提供代码 我提供设备...跑起来
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-9-19 14:49:56 | 显示全部楼层
topmad 发表于 2022-9-19 14:22
来众筹啊
你提供代码 我提供设备...跑起来

跑什么??.......
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-9-20 19:12:28 | 显示全部楼层

跑代码  贼长时间那种
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表