给出的行向量可能类似于以下任何
[10, 10, 10, 11, 10, 9, 0, 0, 1, 0]
[200, 199, 200, 199, 198, 201, 201, 0, 1, 1]
[99, 100, 98, 99, 100, 100, 100, 140, 139, 141]
关键是一侧明显大于另一侧。使用python,是否有一种干净的方法来查找拆分发生的位置?
答案 0 :(得分:2)
一种简单的方法是检查条目是大于还是小于数组的平均值。此代码提供了一个函数,用于查找示例中拆分发生的索引。它在统计上并不稳健,但可以在您提到的标准案例中使用
import numpy as np
def cut(arr):
m = np.mean(np.array(arr))
arr = arr - m
arr = arr > 0
return np.sum(arr)
cut([10, 10, 10, 11, 10, 9, 0, 0, 1, 0])
返回6
,cut([10, 10, 10, 11, 10, 9, 0, 0, 1, 0])
返回7
,cut([99, 100, 98, 99, 100, 100, 100, 140, 139, 141])
返回3
,这是第一个或最后一个元素的索引包含最小值的“组”。
答案 1 :(得分:0)
是。遍历列表。进行运行统计分析;鉴于这些例子,标准差应该是充足的。当您发现严重异常值时,请在此处对列表进行分区。所有的分裂都远远超出了异常值的典型3-sigma标准。
这会让你前进吗?