Numpy 通过分组数组拆分数组
Numpy split array by grouping array
有以下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 声明该点为异常值。 (使用的值不精确)。
我的目标是计算紧凑度,...每个找到的集群
这有点冗长,但应该可以。
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
这样的奇数值可以使用,你可以将它设置为字典的键,然后遍历字典以获得值组,然后你可以将这些值附加到最终的输出数组
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)
保持简单:
[data[labels == l] for l in np.unique(labels)]
同样,您可以在一行中构建字典。
有以下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 声明该点为异常值。 (使用的值不精确)。 我的目标是计算紧凑度,...每个找到的集群
这有点冗长,但应该可以。
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
这样的奇数值可以使用,你可以将它设置为字典的键,然后遍历字典以获得值组,然后你可以将这些值附加到最终的输出数组
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)
保持简单:
[data[labels == l] for l in np.unique(labels)]
同样,您可以在一行中构建字典。