以下两个长度相等的数组。我的目标是将数组B分成由数组A定义的组。因此最终应该有3个数组或数组列表。数组的最终列表应由数组B的以下行组成:
顺序不是很重要。
A = array([[-1],
[ 1],
[ 0],
[ 0],
[ 1]])
B = array([[ 624.5 , 548. ],
[ 912.8201, 564.3444],
[1564.5 , 764. ],
[1463.4163, 785.9251],
[1698.0757, 846.6306]])
通过使用dbscan集群功能,问题发生在我身上。 A数组描述了数组B中点的聚类(0,1)。值-1声明该点为离群值。 (使用的值不精确)。 我的目标是计算每个发现的簇的紧密度,...
答案 0 :(得分:2)
numpy_indexed程序包(免责声明:我是它的作者)在设计时考虑了这类用例。
import numpy_indexed as npi
C = npi.group_by(A).split(B)
不确定每个组的紧凑性是什么意思;但是,与拆分并进行后续计算相比,直接计算组的减少量通常更为有效;从而可以重用分组对象以提高效率:
groups = npi.group_by(A)
mean = groups.mean(B)
std = groups.std(B)
答案 1 :(得分:0)
这有点冗长,但是应该可以使用。
final_dict = {}
for counter in range(0,len(A)):
if(A[counter] not in final_dict):
final_dict[A[counter]] = B[counter]
else:
final_dict[A[counter]] = final_dict[A[counter]] + B[counter]
final_array = []
for key,value in final_dict.items():
final_array.append(value)
基本上,由于要使用-1
之类的奇数值,因此可以将其设置为字典的键,然后遍历字典以获取值的组,然后可以将这些值附加到最终输出数组中
答案 2 :(得分:0)
保持很简单:
[data[labels == l] for l in np.unique(labels)]
类似地,您可以在单行代码中构建字典。