首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:在numpy数组中查找最大值和不连续性

Python:在numpy数组中查找最大值和不连续性
EN

Stack Overflow用户
提问于 2020-11-20 20:24:08
回答 3查看 613关注 0票数 1

我有一个关于在numpy数组中找到最大值或更精确的不连续性的问题?我的示例数据如下所示

代码语言:javascript
复制
a = np.array([3,4,5,8,7,6,5,4,1])

一般来说,我对数据中的每一个最大值/跳跃都很感兴趣。对于数组a,我希望检测8,因为它是最大值(左侧递增数字,右侧递减数字)和值4,因为数据在该值之后下降。到目前为止,我已经使用scipy.signal.argrelextremanp.greater来检测最大值,但我无法检测到这些跳跃/不连续。对于我正在查看的数据,只有朝向较小值的跳跃才会发生,而不是相反。有没有一种简单的方法来检测这些跳跃?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-20 20:41:53

让我们试试这个:

代码语言:javascript
复制
threshold = 1
a = np.array([3, 4, 5, 8, 7, 6, 5, 4, 1])
discontinuities_idx = np.where(abs(np.diff(a))>threshold)[0] + 1

np.diff(a)给出了a的每个组件之间的差异

代码语言:javascript
复制
>>> array([ 1,  1,  3, -1, -1, -1, -1, -3])

然后,应用np.where(abs(np.diff(a))>threshold)[0]来查找检测到的不连续点在哪里(根据绝对差异,高于用户指定的threshold )。最后,如果需要,您可以添加+1来补偿n=1差异idx (请参阅np.diff kwargs),这取决于您需要位于不连续的哪一侧。

代码语言:javascript
复制
>>> discontinuities_idx
>>> array([3, 8])
>>> a[discontinuities_idx]
>>> array([8, 1])
票数 2
EN

Stack Overflow用户

发布于 2020-11-20 20:45:47

您可以尝试这样做:

代码语言:javascript
复制
import numpy as np
import math
a = np.array([3,4,5,8,7,6,5,4,1])
MaxJump = np.diff(a)
print(MaxJump)
print(len(MaxJump))
MaxJump1 = []
for i in range (len(MaxJump)):
    MaxJump1.append(math.fabs(MaxJump[i]))
print(MaxJump1)
MaxJump3 = np.max(MaxJump1)
print(MaxJump3)
票数 0
EN

Stack Overflow用户

发布于 2020-11-20 21:34:42

这听起来像是数学分析,你需要定义一些条件,比如a'(x)>0a'(x)<0。这样你就可以屏蔽它们了:

代码语言:javascript
复制
a = np.array([3,4,5,8,7,8,6,5,4,9,2,9,9,7])
mask1 = np.diff(a) > 0
mask2 = np.diff(a) < 0
>>> np.flatnonzero(mask1[:-1] & mask2[1:]) + 1
array([3, 5, 9], dtype=int64)

它返回满足最大值的项目的索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64929443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档