Как установить ограничение на минимальное расстояние для генерации точек с помощью numpy.random.rand?

Я пытаюсь сгенерировать эффективный код для генерации ряда случайных векторов положения, которые затем использую для вычисления парной корреляционной функции. Мне интересно, есть ли простой способ установить ограничение на минимально допустимое расстояние между любыми двумя точками, расположенными в моем боксе.

Мой код в настоящее время выглядит следующим образом:

def pointRun(number, dr):
"""
Compute the 3D pair correlation function
for a random distribution of 'number' particles
placed into a 1.0x1.0x1.0 box.
"""
## Create array of distances over which to calculate.   
    r = np.arange(0., 1.0+dr, dr)

## Generate list of arrays to define the positions of all points,
##    and calculate number density.
    a = np.random.rand(number, 3)
    numberDensity = len(a)/1.0**3

## Find reference points within desired region to avoid edge effects. 
    b = [s for s in a if all(s > 0.4) and all(s < 0.6) ]

## Compute pairwise correlation for each reference particle
    dist = scipy.spatial.distance.cdist(a, b, 'euclidean')
    allDists = dist[(dist < np.sqrt(3))]

## Create histogram to generate radial distribution function, (RDF) or R(r)
    Rr, bins = np.histogram(allDists, bins=r, density=False)

## Make empty containers to hold radii and pair density values.
    radii = []
    rhor = []

## Normalize RDF values by distance and shell volume to get pair density.
    for i in range(len(Rr)):
        y = (r[i] + r[i+1])/2.
        radii.append(y)
        x = np.average(Rr[i])/(4./3.*np.pi*(r[i+1]**3 - r[i]**3))
        rhor.append(x)

## Generate normalized pair density function, by total number density
    gr = np.divide(rhor, numberDensity)
    return radii, gr

Ранее я пытался использовать цикл, который вычислял все расстояния для каждой точки, как она была сделана, а затем принята или отклонена. Этот метод был очень медленным, если я использую много очков.

Ответы на вопрос(2)

Ваш ответ на вопрос