擅长:python、mysql、java
<p>IIUC,这样应该行得通:</p>
<pre><code>>>> arr = np.array([0,0,0,0,0,1,1,1,1,1])
>>> want_frac = 0.2
>>> n = int(round(arr.sum() - want_frac * len(arr)))
>>> indices_to_flip = np.random.choice(arr.nonzero()[0], n, replace=False)
>>> arr[indices_to_flip] = 0
>>> arr
array([0, 0, 0, 0, 0, 0, 1, 0, 1, 0])
>>> arr.mean()
0.20000000000000001
</code></pre>
<p>首先我们计算出需要翻转多少个数字(尽量接近正确的值),然后随机选择<code>n</code>个非零索引,最后将它们设置为零。你知道吗</p>
<p>注意,正如JFS在注释中所指出的,您应该验证<code>n > 0</code>,以确保您不会意外地做出您不想做的更改。你知道吗</p>