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.bincountnp.ravel_multi_index
添加回答
舉報
