gpt4 book ai didi

python - Numpy 数组按两个条件过滤

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:19 26 4
gpt4 key购买 nike

我正在尝试运行自定义 kmeans 聚类算法,但无法按聚类获取二维 numpy 数组的每一列(项)的文档频率。我当前的算法有两个 numpy 数组,一个按术语 [2000L,9500L] 列出文档的原始数据集,另一个是聚类分配 [2000L,]。有5个集群。我需要做的是创建一个数组,列出每个集群的文档频率——基本上是每列中的一个计数,其中列号与不同数组中的行号匹配。输出将是一个 [5L, 9500L] 数组(簇 x 项)。我无法找到一种方法来执行相当于 countif 和 group by 的操作。下面是一些示例数据和我想要的输出,如果我只用 2 个集群运行它:

import numpy as np

dataset = np.array[[1,2,0,3,0],[0,2,0,0,3],[4,5,2,3,0],[0,0,2,3,0]]
clusters = np.array[0,1,1,0]
#run code here to get documentFrequency
print documentFrequency
>> [1,1,1,2,0],[1,2,1,1,1]

我的想法是选择出与每个集群匹配的特定行,因为这样计数应该很容易。例如,如果我可以将数据拆分为以下数组:

cluster0 = np.array[[1,2,0,3,0],[0,0,2,3,0]]
cluster1 = np.array[[0,2,0,0,3],[4,5,2,3,0]]

任何方向或指示将不胜感激!

最佳答案

我不认为有任何简单的方法来向量化您的代码,但如果您只有几个集群,您可以做显而易见的事情:

>>> cluster_count = np.max(clusters)+1
>>> doc_freq = np.zeros((cluster_count, dataset.shape[1]), dtype=dataset.dtype)
>>> for j in xrange(cluster_count):
... doc_freq[j] = np.sum(dataset[clusters == j], axis=0)
...
>>> doc_freq
array([[1, 2, 2, 6, 0],
[4, 7, 2, 3, 3]])

关于python - Numpy 数组按两个条件过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19846250/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com