gpt4 book ai didi

python - 当数据重复时如何用 pandas 或 numpy 数组检测下降?

转载 作者:行者123 更新时间:2023-12-05 05:46:51 25 4
gpt4 key购买 nike

我试图通过检查 n < n-1 来找到数组中凹凸不平的位置和 n > n+1 .

这是一种有效的方法,但是当数据在弹跳之前重复时,它会失败,例如{100,80,80,100} .

看这个例子:

import numpy as np
import pandas as pd

data = np.array([100,250,200,350,650,650,650,500,400,300,300,350,100])

dips = np.flatnonzero((np.roll(data,1) > data).astype(int) & (data < np.roll(data,-1)).astype(int))
bumps = np.flatnonzero((np.roll(data,1) < data).astype(int) & (data > np.roll(data,-1)).astype(int))

print(dips,bumps)

我可以通过删除重复的元素来让它工作,这样我们就能得到更多的输出:

df = pd.DataFrame({'close':data})
data = (df.loc[df.shift(-1)['close'] != df['close']]).to_numpy()

dips = np.flatnonzero((np.roll(data,1) > data).astype(int) & (data < np.roll(data,-1)).astype(int))
bumps = np.flatnonzero((np.roll(data,1) < data).astype(int) & (data > np.roll(data,-1)).astype(int))

print(dips,bumps)

但是,显然在这种情况下不会保留顺序,因此结果无效。

我不知道这似乎是一个简单的问题,但如果不回退到 i, j 我还不能完全解决它循环。

编辑:预期的输出应该以正确的顺序捕获所有的凹凸:

dips:  [2,9] or [2,10]
bumps: [1,4,11] or [1,5,11] or [1,6,11]

由于那里的值相同,我们可以使用第一个、中间或最后一个位置。

enter image description here

最佳答案

我明白了:

from scipy.signal import find_peaks
dips, bumps = find_peaks(-data), find_peaks(data)

关于python - 当数据重复时如何用 pandas 或 numpy 数组检测下降?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71119396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com