使用Numpy按照分组数组拆分数组

3
有以下两个长度相等的数组。我的目标是将数组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将点声明为异常值。(所使用的值不是精确的) 我的目标是计算每个找到的簇的紧密度...


你的分割逻辑是什么? - Mazdak
这听起来更像是Pandas的工作。 - Nils Werner
3个回答

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
保持简单:
[data[labels == l] for l in np.unique(labels)]

同样地,你可以用一行代码构建一个字典。

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这样的奇数值可供使用,因此您可以将其设置为字典的键,然后迭代字典以获取值的组,然后将其附加到最终输出数组中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接