2 回答

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊
可以使用 a 獲取實(shí)際將出現(xiàn)在矩陣中的值。這之所以有效,是因?yàn)樵M是可哈希的。任務(wù)變得非常簡(jiǎn)單: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
相反,您可以將配對(duì)轉(zhuǎn)換為拉維矩陣中的線性索引:
ind = np.ravel_multi_index(tuple(np.array(coocPairs).T), a.shape)
現(xiàn)在你可以做
ind, count = np.unique(ind, return_counts=True)
a.ravel()[ind] = count
或者,您可以使用 np.bincount 更快地獲取計(jì)數(shù),或避免預(yù)先計(jì)數(shù)。帶有raveled索引的解決方案為您節(jié)省了預(yù)先分配的麻煩: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貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以使用np.add.at
np.add.at(a,tuple(coocPairs.T),1)
如果這還不夠快,那么有更快但不太直接的解決方案。那些依賴于使用 的扁平化索引。np.bincount
np.ravel_multi_index
添加回答
舉報(bào)