python判断序列值横穿整个区间的次数
这里需要用的集合的知识,一般python集合会用intervals库
或portion库
,这里我们用portion库
- intervals库github:https://github.com/kvesteri/intervals
- portion库github:https://github.com/AlexandreDecan/portion
需要安装:
pip install portion
算法思路
- 得到序列的极值,根据极值(极大值、极小值)划分区间,在一个区间里的数就是单调的,这样可以简化计算
- 一个区间一个区间的判断
- 有可能第一个区间插入目标区间一半,另一个区间没捅穿又出来了,类似于“W”类型,因此我们使用一个记录过往区间的变量
cul_portion
,记录之前走过的区间
import numpy as np
import portion
import scipy.signal as sgdef monotonic(x):"""判断单调"""dx = np.diff(x)return np.all(dx <= 0) or np.all(dx >= 0)def check_cross_interval(values: np.ndarray, target_interval: portion.Interval) -> int:"""看序列值横穿整个目标区间的次数:param values: 一个序列值:param target_interval: 目标区间:return: 次数"""if len(values) < 2: # 值小于2return 0if monotonic(values): # 单调value_portion = portion.closed(values.min(), values.max())if target_interval in value_portion:return 1else:return 0single_index = np.append(sg.argrelmin(values)[0], sg.argrelmax(values)[0])single_index.sort()# 第一个区间cross_num = 0 # 穿过的次数first_portion = portion.closed(min(values[0], values[single_index[0]]), max(values[0], values[single_index[0]]))if target_interval in first_portion:cross_num += 1# 中间所有的区间cul_portion = portion.empty() # 用于不断迭代合并的区间last_index = single_index[0]for index in single_index[1:]:interval_portion = portion.closed(min(values[last_index], values[index]), max(values[last_index], values[index]))last_index = indexcul_portion = cul_portion.union(interval_portion)if target_interval in cul_portion:cross_num += 1cul_portion = portion.empty()# 最后一个区间last_index = portion.closed(min(values[-1], values[single_index[-1]]), max(values[-1], values[single_index[-1]]))if target_interval in last_index:cross_num += 1return cross_numif __name__ == '__main__':array = np.array([1, 2, 3, 2, -1, 2, 3, 0, 2, -1])across_counts = check_cross_interval(array, portion.closed(0, 1))print(across_counts) # 5次
python判断序列值横穿整个区间的次数相关推荐
- python判断一个值是否为Nan,NULL
python判断一个值是否为Nan,NULL 在实际的实验中,我们经常会遇到输出为Nan或者NULL的情况,那么我们该如何去判断它,然后用if语句将其规避勒 方案一如下: import numpy a ...
- python判断一个数是否在一个区间内_Python3基础 if elif 示例 判断一个数在哪个区间内...
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda : 4.5.11 typesetting : Markdown ...
- python判断序列符号变化的次数
方法如下 def across_zero(series: pd.Series):"""统计越过0的次数"""return sum((seri ...
- python判断当前时间是否在两个时间之间_Python 判断时间是否在时间区间内的实例...
判断时间是否在时间区间内 大家都知道 3<4<5这种连等式判断在python中是可行的 >>> 3<4<5 True 那么给定时间是否在时间区间内,也可以用连 ...
- python如何判断列表是否为空_python简单判断序列是否为空的方法
python简单判断序列是否为空的方法 本文实例讲述了python简单判断序列是否为空的方法.分享给大家供大家参考.具体如下: 假设有如下序列: m1 = [] m2 = () m3 = {} 判断他 ...
- Python numpy 判断零矩阵,判断某个值(a)是否在矩阵中
Python numpy 判断0 矩阵,判断某个值(a)是否在矩阵中 百度找 这个需求, 发现没有一种比较简单的解决方式:很多给的答案是要用 循环的方式解决,我觉得不好. 所以写了 一个简单的方式. ...
- Python设置属性值方法setattr()和判断变量是否存在的方法
介绍Python设置属性值方法setattr()和判断变量是否存在的方法 1.以属性名为变量的方式给一个对象添加属性 使用 setattr 方法 obj = SomeClass() key = 'ke ...
- python 判断字典是否包含某个key,以及对应的value 值
python 判断字典是否包含某个key 可以使用 in 来判断 具体如下: num = {"a": 1, "b": 2, "c": 3} ...
- python之判断一个值是不是可以被调用
判断一个值是不是可以被调用---callable方法 要点,传值时只传入名字,后面不加括号 def func(arg):"""判断arg是否可以被调用,如果可以则执行,并 ...
最新文章
- 开发者必备!Github 上 1.6W 星的「黑魔法」,早知道就不会秃头了
- MDK_main()代码执行过程分析
- java中使用okhttpsoap,Android okHttp网络请求之Retrofit+Okhttp+RxJava组合
- LeetCode MySQL 580. 统计各专业学生人数
- RuoYi-Cloud 部署篇_03(linux环境 Oracle +nginx版本)
- 【教程】利用OBS+腾讯会议进行线上考试
- less-postcss
- 一生一世一双人,半醉半醒半浮生
- 什么是CloudComputing
- [ZJOI2006]物流运输
- C++ GUI Qt4 自学笔记
- 跟我一起学C++课程笔记(第二天)
- 【UVA10603】Fill(优先队列+状态转移)
- 免费分享20套PHP源码
- 一文详解 NanoHttpd 微型服务器原理
- word文档通配符换行_Word效率指南(二)
- excel冻结窗格线的设置问题
- Django在Terminal中python manage.py startapp myapp报name ‘os‘ is not defined
- gb 28181的20位编码简介
- 猜数字?我要王者荣耀