2 回答
TA贡献1776条经验 获得超12个赞
可以使用 a 获取实际将出现在矩阵中的值。这之所以有效,是因为元组是可哈希的。任务变得非常简单:collections.Counter
counts = collections.Counter(coocPairs)
ind = np.array(list(counts.keys())).T
a[ind[0], ind[1]] = list(counts.values())
通常,with 是 .在这种情况下,有必要指定轴,并记住它将是较慢的解决方案之一:np.uniquereturn_counts=TrueCounter
ind, count = np.unique(coocPairs, return_counts=True, axis=0)
a[ind.T[0], ind.T[1]] = count
相反,您可以将配对转换为拉维矩阵中的线性索引:
ind = np.ravel_multi_index(tuple(np.array(coocPairs).T), a.shape)
现在你可以做
ind, count = np.unique(ind, return_counts=True)
a.ravel()[ind] = count
或者,您可以使用 np.bincount 更快地获取计数,或避免预先计数。带有raveled索引的解决方案为您节省了预先分配的麻烦:np.add.atbincounta
ind = np.ravel_multi_index(tuple(np.array(coocPairs).T), (n, n))
a = np.bincount(ind, minlength=n * n).reahape(n, n)
TA贡献1833条经验 获得超4个赞
您可以使用np.add.at
np.add.at(a,tuple(coocPairs.T),1)
如果这还不够快,那么有更快但不太直接的解决方案。那些依赖于使用 的扁平化索引。np.bincount
np.ravel_multi_index
添加回答
举报