在python中识别数组中的模式

在python中识别数组中的模式,python,arrays,Python,Arrays,我有一个关于在数组中识别模式的问题。我正在使用以下阵列: A = [1.0, 1.1, 9.0, 9.2, 0.9, 9.1, 1.0, 1.0, 1.2, 9.2, 8.9, 1.1] 现在,这个数组显然由关于~1的元素和关于~9的元素组成 有没有办法将这些集群分开?也就是说,要达到以下目标: a_1 = [1.0, 1.1, 0.9, 1.0, 1.0, 1.2, 1.1] # elements around ~1 a_2 = [9.0, 9.2, 9.1, 9.2, 8.9] # e

我有一个关于在数组中识别模式的问题。我正在使用以下阵列:

A = [1.0, 1.1, 9.0, 9.2, 0.9, 9.1, 1.0, 1.0, 1.2, 9.2, 8.9, 1.1]
现在,这个数组显然由关于
~1
的元素和关于
~9
的元素组成

有没有办法将这些集群分开?也就是说,要达到以下目标:

a_1 = [1.0, 1.1, 0.9, 1.0, 1.0, 1.2, 1.1]  # elements around ~1
a_2 = [9.0, 9.2, 9.1, 9.2, 8.9]  # elements around ~9

非常感谢。最好。

您可以通过比较每一个更接近的元素来做到这一点。是接近1还是9:

a_1 = [i for i in A if abs(i-1)<=abs(i-9)]
a_2 = [i for i in A if abs(i-1)>abs(i-9)]
a_1=[i代表if-abs(i-1)abs(i-9)中的i]
当然,这不是集群的通用解决方案。只有当您知道集群的中心(1和9)时,它才起作用

如果你不知道集群的中心,我认为你应该使用像

这是一个简单的K-Means实现(K=2和100作为极限迭代)。你不需要知道集群的中心,它首先随机选取

from random import randint

A = [1.0, 1.1, 9.0, 9.2, 0.9, 9.1, 1.0, 1.0, 1.2, 9.2, 8.9, 1.1]

x = A[randint(0,len(A)-1)]
y = A[randint(0,len(A)-1)]
for _ in range(100):
    a_1 = [i for i in A if abs(i-x)<=abs(i-y)]    
    a_2 = [i for i in A if abs(i-x)>abs(i-y)]    
    print(x,y)
    x = sum(a_1)/len(a_1)
    y = sum(a_2)/len(a_2)

print a_1
print a_2
来自随机导入randint
A=[1.0,1.1,9.0,9.2,0.9,9.1,1.0,1.0,1.2,9.2,8.9,1.1]
x=A[randint(0,len(A)-1]
y=A[randint(0,len(A)-1]
对于范围内的uu(100):
a_1=[i代表i在if-abs(i-x)abs(i-y)中]
打印(x,y)
x=总和(a_1)/len(a_1)
y=总和(a_2)/len(a_2)
打印a_1
打印a_2

相关值之间的差值是多少?排序听起来是合理的第一步。然后,确定平均值和分布。。。这不是一个头脑风暴式的问题吗?是的,我知道,我也在考虑排序,但我想知道是否有一个函数或东西来识别列表或数组中的集群。如果没有,我将继续排序并获得值中的最大步长:)谢谢您的回答!然而,我不知道1和9的值是先验的。我想确定这些价值观。这就是我的问题,而不是<代码> ABS>代码>你可以使用<代码>如果是圆(i)=1</代码>右?@ VikasDamodar,当中间有数字时,我认为它不能正常工作,让我们说7@urgeo在这种情况下,我想你需要一个聚类算法,可能是K-Means@urgeo马里奥博罗所说的完全正确。你需要一些基础来对这些数字进行分类。其他方面,一些数字不会被列为例:5