擅长:python、mysql、java
<p>这是你代码的矢量化版本。矢量化的一个令人愉快的副作用是它通常会去掉大多数索引。你知道吗</p>
<p>这段代码假设父向量是<code>0, 1, 2, ...</code>的乱序。如果不是这样,还需要做更多的工作:</p>
<pre><code>def invperm(p):
out = np.empty_like(p)
idx = np.ogrid[tuple(map(slice, p.shape))]
idx[-1] = p
out[idx] = np.arange(p.shape[-1])
return out
def f_pp(selected_parents):
sp = np.reshape(selected_parents, (2, -1))
_, N = sp.shape
co = np.random.randint(0, N)
out = sp.copy()
slc = np.s_[:co] if 2*co < N else np.s_[co:]
out[::-1, slc] = out[
np.c_[:2], np.sort(invperm(sp)[np.c_[:2], sp[::-1, slc]], axis=1)]
return out
</code></pre>