Python确定何时不再显着增加或减少数组

问题描述 投票:0回答:2

给出如下数组:

array([ 33.5 , -12.17,  -1.58,  -6.15,   4.73,  -5.62,  -5.59,  -0.79,
        -4.73,   0.58,   1.07,  -1.33,   1.22,   2.72,  -3.24,  -3.33,
         0.65,   0.79,   2.66,  -1.45,   2.  ,   3.52,  -0.6 ,   1.36,
        -0.51,  -1.25,  -0.37,   0.55,   2.01,  -0.25,   0.08,  -0.38,
         0.94,   0.4 ,  -1.15,  -1.2 ,  -1.11,   1.33,  -1.11,   1.02,
        -0.55,   0.59,  -0.8 ,  -0.28,  -0.61,   0.48,  -1.94,   0.14,
        -0.79,  -1.34,   0.46,   0.69,  -0.08,  -0.2 ,   0.16,  -1.42,
        -0.29,  -0.48,  -0.03,  -0.03,  -0.39,   0.74,   0.04,   0.5 ,
         0.2 ,   0.09,   1.53,  -0.98,   0.22,   0.86,  -0.05,   0.06,
         0.08,  -0.69,  -0.54,  -0.77,   0.35,   0.45,  -0.16,  -0.07,
        -0.32,   1.01,   0.21,  -0.24,   0.06,  -0.54,  -0.2 ,  -0.36,
         0.27,   0.36,   0.16,  -0.29,   0.04,  -0.53,   0.46,   0.37,
         0.14,  -0.41,   0.3 ,  -0.09,  -0.49,  -0.26,  -0.16,  -0.33,
        -0.03,  -0.46,   0.14,   0.01,  -0.41,   0.29,  -0.17,  -0.16,
        -0.09,   0.1 ,   0.04,  -0.08,  -0.33,  -0.06,  -0.09,  -0.21,
         0.06,  -0.31,  -0.23,  -0.15,   0.02,  -0.11,  -0.49,   0.22,
         0.49,  -0.22,   0.07,  -0.02,  -0.07,  -0.47,  -0.22,  -0.13,
         0.22,   0.23,   0.17,  -0.18,  -0.09,  -0.22,  -0.29,   0.19,
         0.01,   0.13,   0.22,  -0.29,   0.01,  -0.11,  -0.33,   0.1 ,
         0.1 ,   0.14,  -0.09,  -0.33,  -0.01,   0.29,   0.07,   0.1 ,
         0.09,   0.24,  -0.07,   0.2 ,  -0.13,  -0.04,  -0.39,  -0.12,
        -0.27,   0.01,   0.12,   0.05,  -0.02,  -0.1 ,   0.21,  -0.13,
        -0.02,  -0.11,  -0.03,  -0.19,   0.16,   0.14,   0.06,  -0.12,
         0.04,  -0.47,  -0.06,   0.2 ,   0.13,   0.11,  -0.17,  -0.14,
        -0.02,  -0.33,  -0.21,  -0.22,  -0.1 ,   2.72,   0.03,  -0.09,
         0.03,  -0.07,  -0.14,  -0.03,  -0.16,   0.03,  -0.08,   0.02,
         0.04,  -0.1 ,  -0.04,  -0.05,   0.13,  -0.39,   0.01,  -0.16,
         0.2 ,   0.13,  -0.24,  -0.27,  -0.08,  -0.62,  -0.04,  -0.31,
         0.02,   0.25,   0.23,   0.05,  -0.12,  -0.02,   0.1 ,  -0.02,
        -0.09,   0.27,  -0.14,   0.15,  -0.14,   0.03,  -0.13,  -0.09,
        -0.12,  -0.07,  -0.1 ,   0.06,  -0.13,  -0.05,  -0.07,  -0.17,
        -0.03,  -0.  ,   0.25,   0.1 ,   0.06,   0.16,  -0.01,   0.28,
         0.  ,  -0.07,   0.19,   0.24,   0.02,   0.09,  -0.05,  -0.06,
        -0.05,   0.08,  -0.01,   0.05,  -0.12,  -0.  ,   0.01,  -0.13,
        -0.1 ,   0.05,  -0.18,  -0.13,   0.3 ,   0.21,   0.17,  -0.09,
         0.21,  -0.02,  -0.04,   0.14,   0.22,  -0.09,  -0.04,   0.08,
         0.15,  -0.08,   0.04,  -0.07,  -0.1 ,   0.01,   0.04,  -0.01,
         0.06,   0.01,   0.27,  -0.02,   0.07,  -0.02,   0.22,   0.11,
        -0.03,   0.16,   0.03,  -0.19,   0.16,   0.05,  -0.08,   0.07,
         0.03,  -0.17,   0.13,   0.13,   0.13,  -0.12,  -0.16,  -0.16,
         0.06,   0.2 ,  -0.07,  -0.1 ,  -0.05,  -0.17,   0.02,   0.13,
        -0.04,  -0.07,  -0.17,  -0.18,   0.03,  -0.17,  -0.07,   0.12,
        -0.05,  -0.  ,  -0.  ,   0.14,  -0.13,   0.03])

我想找到数组没有波动的索引,或者说考虑下一项不再重要。

我如何确定这一点?例如,有没有一种方法可以用熊猫来计算?也许考虑总平均值并检查在计算中添加额外的项目是否会明显增加或减少总平均值?

我试图找到本地的最小值和最大值

 extrema = np.concatenate((argrelmin(array)[0], argrelmax(array)[0]))

但是基本上返回整个数组的长度,因为数组仍然有波动

python arrays pandas
2个回答
0
投票

您可以这样做,根据需要调整envelope

import numpy as np
import matplotlib.pyplot as plot

x = np.array([ 33.5 , ...])

mean = np.mean(x)
envelope = 0.1

for i in range(len(x)-1, -1, -1):
    if abs(x[i]-mean) > envelope:
        i -= 1
        break

plot.plot(x, '.')
plot.axvline(i)
plot.show()

带有envelope = 0.5

chart

带有envelope = 0.1

chart


0
投票

您可以通过使用滑动窗口并查看窗口上的标准偏差来进行评估。一个简单的阈值可能就足够了。例如:

k = 6  # window size
thresh = 0.5
for i in range(0, len(a) - k):
    b = np.std(a[i:i+k])
    if b < thresh:
        print(i)
        break
>>> 55
© www.soinside.com 2019 - 2024. All rights reserved.