Numpy实现20x20平面内随机4x4正方形区域的坐标对应个体采样
实现方案
完整可运行代码如下:
import numpy as np from numpy.random import default_rng rng = default_rng() inds = rng.choice(50, size=50, replace=False) # 个体ID标签 locs = np.random.randint(0, 20, size=(50, 2)) # 对应的20x20平面坐标,坐标取值范围0<=x<20、0<=y<20 # 1. 随机生成4x4正方形的边界:确保正方形完全落在20x20平面内 square_size = 4 # x轴起始值取值范围0~16,确保x_max = x_min +4 <=20 x_min = rng.integers(0, 20 - square_size + 1) # y轴起始值同理 y_min = rng.integers(0, 20 - square_size + 1) x_max = x_min + square_size y_max = y_min + square_size # 2. 筛选落入正方形内的个体 mask = (locs[:,0] >= x_min) & (locs[:,0] < x_max) & (locs[:,1] >= y_min) & (locs[:,1] < y_max) selected_inds = inds[mask] # 可选择存储正方形位置和筛选结果,方便后续验证 result = { 'square_range': {'x': [x_min, x_max], 'y': [y_min, y_max]}, 'selected_individuals': selected_inds }
逻辑说明
- 正方形边界生成逻辑:20x20平面的坐标范围是
[0,20)的左闭右开区间,4x4大小的正方形的最小x/y坐标最多只能取到16,加4后刚好到20,不会超出平面范围 - 筛选逻辑:用布尔掩码同时判断个体的x、y坐标是否都落在正方形的区间内,直接索引ID数组即可得到符合要求的个体
- 如果需要多次随机采样正方形筛选,把上面的边界生成和筛选逻辑封装成函数循环调用即可
内容的提问来源于stack exchange,提问作者zach
相关产品推荐
相关产品推荐

