擅长:python、mysql、java
<p>与Nils Werner的回答相似,但更直接:</p>
<pre class="lang-py prettyprint-override"><code>import numpy as np
size = 10000
num_true = 1000
</code></pre>
^{pr2}$
<p>同样快;使用IPython的<code>%%timeit</code>魔术:</p>
<pre class="lang-py prettyprint-override"><code>%%timeit
a = np.zeros(size, dtype=int)
a[:num_ones] = 1
np.random.shuffle(a)
a = a.astype(bool)
</code></pre>
<p>输出:<code>217 µs ± 2.33 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)</code></p>
<pre class="lang-py prettyprint-override"><code>%%timeit
mask = np.concat([np.ones(num_true, dtype=bool), np.zeros(size - num_true, dtype=bool)])
np.random.shuffle(mask)
</code></pre>
<p>输出:<code>201 µs ± 1.32 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)</code></p>