¿Cómo generar puntos aleatorios uniformes dentro de una bola/esfera de dimensión d?
En este hilo, @Thomas Lux tiene una solución maravillosa para generar puntos uniformemente aleatorios dentro de una bola nD con radio r=1. Pero ahora quiero generar puntos donde sus coordenadas cartesianas sean números enteros . No conozco ninguna forma, excepto generar puntos aleatorios en un cubo y tirar los puntos con una norma mayor que 1 .
No sé si simplemente usar randint o empujar np.floor() al vector servirá.
Simplemente usar round() en muestras reales uniformes casi funcionaría. Excepto que los puntos enteros cerca del borde de la pelota tendrían menos probabilidades de aparecer. Esto se debe a que el vecindario de hipercubo de un punto en el borde está contenido en menos de la mitad en la bola de la que está tomando muestras.
Sin embargo, hay una solución fácil. Genere muestras reales en una bola que contenga completamente todos esos hipercubos, el radio r+sqrt(n)/2 debería ser suficiente para eso, luego aplique el redondeo y finalmente descarte los puntos enteros que no están dentro de la distancia r .
Ciertamente, la bola exterior puede ser mucho más grande que la interior, dependiendo de r y n , pero la tasa de descarte debería ser aún mejor.