首页 > 解决方案 > 通过对数组进行分组的 Numpy 拆分数组

问题描述

有以下 2 个长度相等的数组。我的目标是将数组 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 将该点声明为异常值。(使用的值并不精确)。我的目标是计算每个找到的集群的紧凑性......

标签: pythonarraysnumpysplitdbscan

解决方案


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)

推荐阅读