擅长:python、mysql、java
<p>我对这个问题很感兴趣,并试图用scipy的<a href="https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.spatial.cKDTree.html#scipy.spatial.cKDTree" rel="nofollow noreferrer">cKDTree</a>有效地解决它。但是,这种方法可能会耗尽内存,因为内部会维护距离为<;=R的所有对的列表。如果R和tot_vec足够小,则可以:</p>
<pre><code>import numpy as np
from scipy.spatial import cKDTree as KDTree
tot_vec = 60000
embed_vec = np.random.randn(tot_vec, 3)
R = 0.1
tree = KDTree(embed_vec, leafsize=100)
p = np.zeros(tot_vec)
for pair in tree.query_pairs(R):
p[pair[0]] += 1
p[pair[1]] += 1
</code></pre>
<p>如果内存是个问题,那么只要付出一定的努力,就可以在Python中将<code>query_pairs</code>重写为一个生成器函数,但代价是C性能。在</p>