如何用Numpy将数组中500个随机元素从0替换为1?
实现100×100数组中随机500个0替换为1的Numpy方案
方法一:基于循环的补全实现
如果必须通过循环完成需求,可以用集合避免重复选中同一位置,再遍历替换:
import numpy as np # 创建100×100的全0二维数组 arr = np.zeros((100, 100), dtype=int) # 补全循环部分:生成500个不重复的随机坐标 selected_positions = set() while len(selected_positions) < 500: row = np.random.randint(0, 100) col = np.random.randint(0, 100) selected_positions.add((row, col)) # 遍历坐标完成替换 for (row, col) in selected_positions: arr[row, col] = 1
集合的特性保证了每个坐标只被选中一次,避免重复替换同一个元素。
方法二:更高效的Numpy矢量操作(无需循环)
Numpy提供了更优的实现方式,完全不需要手动写循环,性能远高于循环方案:
import numpy as np arr = np.zeros((100, 100), dtype=int) # 从数组所有元素中随机挑选500个不重复的扁平索引 flat_indices = np.random.choice(arr.size, 500, replace=False) # 通过扁平索引直接赋值 arr.flat[flat_indices] = 1
arr.flat将二维数组转为一维视图,np.random.choice直接生成不重复索引,一步完成替换操作。
内容的提问来源于stack exchange,提问作者Aksel Andrè Wiik Martinsen
相关产品推荐
相关产品推荐

