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?
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!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With