擅长:python、mysql、java
<p>忽略numpy部分,在纯Python中查找冲突索引对的速度要快得多,所需时间与<code>len(a)</code>加上<code>len(b)</code>加上冲突的数量成比例,而不是与向量长度的<em>乘积</em>成比例的嵌套循环:</p>
<pre><code>def conflicts(a, b):
from collections import defaultdict
elt2ix = defaultdict(list)
for i, elt in enumerate(a):
elt2ix[elt].append(i)
for j, elt in enumerate(b):
if elt in elt2ix:
for i in elt2ix[elt]:
yield i, j
</code></pre>
<p>然后,例如</p>
<pre><code>for pair in conflicts([1, 2, 4, 5, 2], [2, 3, 8, 4]):
print(pair)
</code></pre>
<p>显示</p>
<pre><code>(1, 0)
(4, 0)
(2, 3)
</code></pre>
<p>这是2和4的匹配出现的索引</p>