如何无重复地在25×25的Numpy零数组中随机替换指定数量的0为1
如何在25×25的Numpy零数组中随机指定数量的位置替换为1(无重复)
我创建了一个25×25的Numpy数组,初始值全部为0。希望根据用户指定的数量(范围为1到625),将数组中的0随机替换为1,且需避免重复替换同一位置,请问该如何实现?
生成初始数组的代码
import numpy as np arr = np.zeros((25,25), dtype=int)
预期效果(以4×4数组为例)
替换前:
0,0,0,0 0,0,0,0 0,0,0,0 0,0,0,0
替换1个0后(随机位置):
0,0,0,0 0,0,1,0 0,0,0,0 0,0,0,0
替换16个0后(全部替换):
1,1,1,1 1,1,1,1 1,1,1,1 1,1,1,1
解决方案
可以利用Numpy的随机索引特性实现,核心是生成不重复的线性索引来定位需要替换的位置,具体代码如下:
import numpy as np # 创建25×25零数组 arr = np.zeros((25, 25), dtype=int) # 用户指定的替换数量(范围1-625,这里以50为例) replace_count = 50 # 生成指定数量的唯一线性索引 total_elements = arr.size unique_indices = np.random.choice(total_elements, replace_count, replace=False) # 通过展平数组赋值,将指定位置设为1 arr.flat[unique_indices] = 1 # 验证替换结果(可选) print(f"替换后数组中1的数量:{np.sum(arr)}") print(arr)
代码说明
arr.flat:将二维数组展平为一维可迭代对象,支持直接通过线性索引修改原数组的对应位置,无需手动转换二维坐标。np.random.choice(..., replace=False):确保生成的索引完全唯一,避免重复修改同一位置。- 若需要固定随机结果(方便调试),可以在生成索引前添加
np.random.seed(xxx)设置随机种子。
内容的提问来源于stack exchange,提问作者user11709754
相关产品推荐
相关产品推荐

