如何生成位置随机、数量相等的0和1填充NumPy数组
固定数量0/1随机数组实现方案
需求为生成长度为20、恰好包含10个0和10个1、元素位置完全随机的numpy数组。
原有实现逐元素独立调用np.random.choice([0,1])做有放回抽样,最终数组内0和1的数量服从二项分布,会随机波动,无法保证恰好各10个。
推荐实现
核心逻辑非常直接:先凑齐固定数量的0和1,再全局随机打乱元素位置,就能同时满足数量固定、位置随机两个要求,numpy原生实现无需写循环,运行效率很高。
import numpy as np # 构造包含10个0、10个1的基础数组 K = np.concatenate([np.zeros(10, dtype=int), np.ones(10, dtype=int)]) # 原地打乱数组元素顺序 np.random.shuffle(K) print(K)
运行输出示例(每次运行结果随机):
[1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 0 0 1]
输出数组内0和1的数量永远恰好各10个,且所有元素位置完全随机。
等效替代写法
如果不想使用原地打乱的shuffle接口,也可以选择其他等效实现:
- 用
np.random.permutation直接返回打乱后的新数组:
import numpy as np K = np.random.permutation([0]*10 + [1]*10)
- 用无放回抽样模式调用
np.random.choice,本质和全量打乱逻辑一致:
import numpy as np K = np.random.choice([0]*10 + [1]*10, size=20, replace=False)
内容的提问来源于stack exchange,提问作者Lost
相关产品推荐
相关产品推荐

