擅长:python、mysql、java
<p>您可以使用<code>collections.Counter</code>获取实际出现在矩阵中的值。这是因为元组是可散列的。任务变得非常简单:</p>
<pre><code>counts = collections.Counter(coocPairs)
ind = np.array(list(counts.keys())).T
a[ind[0], ind[1]] = list(counts.values())
</code></pre>
<p>通常,<code>np.unique</code>和<code>return_counts=True</code>是<code>Counter</code>的代名词。在这种情况下,有必要指定轴,并记住它将是较慢的解决方案之一:</p>
<pre><code>ind, count = np.unique(coocPairs, return_counts=True, axis=0)
a[ind.T[0], ind.T[1]] = count
</code></pre>
<p>相反,您可以将线对转换为展开矩阵中的线性索引:</p>
<pre><code>ind = np.ravel_multi_index(tuple(np.array(coocPairs).T), a.shape)
</code></pre>
<p>现在你可以做了</p>
<pre><code>ind, count = np.unique(ind, return_counts=True)
a.ravel()[ind] = count
</code></pre>
<p>或者,您可以使用<a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.bincount.html" rel="nofollow noreferrer">^{<cd5>}</a>来加快计数,或者使用<code>np.add.at</code>来避免预先计数。带有raveled索引的<code>bincount</code>解决方案省去了预分配<code>a</code>的麻烦:</p>
<pre><code>ind = np.ravel_multi_index(tuple(np.array(coocPairs).T), (n, n))
a = np.bincount(ind, minlength=n * n).reahape(n, n)
</code></pre>