2017-08-10 119 views
-2

行矢量被给予其可能看起来像以下任何分裂阵列分为两个部分

[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,有没有一种干净的方式来找到分裂发生的地方?

+3

你能否请说明你想拆分数组的基础? – Meccano

回答

0

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

这会让你走吗?

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标准的情况下,这是“组”的第一个或最后一个元素的索引工作包含最小的值。