将数组拆分为两部分

时间:2017-08-10 23:14:33

标签: python numpy vector

给出的行向量可能类似于以下任何

    [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,是否有一种干净的方法来查找拆分发生的位置?

2 个答案:

答案 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])返回6cut([10, 10, 10, 11, 10, 9, 0, 0, 1, 0])返回7cut([99, 100, 98, 99, 100, 100, 100, 140, 139, 141])返回3,这是第一个或最后一个元素的索引包含最小值的“组”。

答案 1 :(得分:0)

是。遍历列表。进行运行统计分析;鉴于这些例子,标准差应该是充足的。当您发现严重异常值时,请在此处对列表进行分区。所有的分裂都远远超出了异常值的典型3-sigma标准。

这会让你前进吗?