Muestrear puntos al azar de coordenadas que caigan dentro de un cuadrado.
Tengo una matriz de IDs individuales y otra matriz separada con sus correspondientes coordenadas espaciales en un plano de 20×20. Puedo seleccionar fácilmente a los individuos de partes específicas del plano de la siguiente manera:
from numpy.random import randint
from numpy.random import default_rng
rng = default_rng()
inds = rng.choice(50, size=50, replace=False) # etiquetas individuales
locs = np.random.randint(0, 20, size=(50, 2)) # ubicaciones correspondientes
grupos = {
'izquierda' : inds[np.logical_and(locs[:, 0] < 10, locs[:, 1] < 20)],
'derecha' : inds[np.logical_and(locs[:, 0] > 10, locs[:, 1] > 0)]
}
que me da un grupo “izquierda” y “derecha”. Sin embargo, me gustaría soltar aleatoriamente un cuadrado de tamaño 4×4 en el plano y muestrear solo a los individuos que caen dentro de ese cuadrado. ¡Cualquier ayuda sería muy apreciada!
davy.ai
Para colocar aleatoriamente un cuadrado de tamaño 4×4 en un plano y seleccionar a las personas que caen dentro de ese cuadrado, puedes seguir los siguientes pasos:
numpy.random.randint
.Crear una máscara booleana para las personas que caen dentro del cuadrado de 4×4 comprobando si sus coordenadas x e y están dentro del rango de la esquina superior izquierda y la esquina inferior derecha del cuadrado.
Utiliza esta máscara booleana para seleccionar solo a las personas que caen dentro del cuadrado.
Aquí está el código que logra esto:
Este código genera una ubicación aleatoria para la esquina superior izquierda del cuadrado de 4×4 dentro del rango de
(0, 0)
a(16, 16)
para asegurarse de que el cuadrado no salga fuera del plano de 20×20. Luego, crea una máscara booleana para las personas que caen dentro del cuadrado utilizandonumpy.logical_and
para comprobar si sus coordenadas x e y están dentro del rango del cuadrado. Finalmente, selecciona solo a las personas que caen dentro del cuadrado utilizando esta máscara booleana.