Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to generate random pairs of numbers in Python, including pairs with one entry being the same and excluding pairs with both entries being the same?

I'm using Python and was using numpy for this. I want to generate pairs of random numbers. I want to exclude repetitive outcomes of pairs with both entries being the same number and I want to include pairs which only have one entry being the same number.I tried to use

import numpy
numpy.random.choice(a,(m,n),replace=False) 

for it, but it excludes any tupels with the the same entries completely, i.e.

import numpy
numpy.random.choice(a=2,(m=2,n=1),replace=False) 

gives me only (1,0) and (0,1) and not (1,1), (0,0), (1,0) and (0,1).

I want to do this because I want to draw a sample of random tuples with a large a and large n(as used above) without getting exactly the same tupels more then once. It also should be more or less efficient. Is there a way that's already implemented to do this?

like image 727
Dave Avatar asked Jun 17 '15 11:06

Dave


1 Answers

Generator random unique coordinates:

from random import randint

def gencoordinates(m, n):
    seen = set()

    x, y = randint(m, n), randint(m, n)

    while True:
        seen.add((x, y))
        yield (x, y)
        x, y = randint(m, n), randint(m, n)
        while (x, y) in seen:
            x, y = randint(m, n), randint(m, n)

Output:

>>> g = gencoordinates(1, 100)
>>> next(g)
(42, 98)
>>> next(g)
(9, 5)
>>> next(g)
(89, 29)
>>> next(g)
(67, 56)
>>> next(g)
(63, 65)
>>> next(g)
(92, 66)
>>> next(g)
(11, 46)
>>> next(g)
(68, 21)
>>> next(g)
(85, 6)
>>> next(g)
(95, 97)
>>> next(g)
(20, 6)
>>> next(g)
(20, 86)

As you can see coincidentally an x coordinate was repeated!

like image 122
James Mills Avatar answered Sep 27 '22 23:09

James Mills