def test_generate_random_choice_weighted(): numpy.random.seed(0xDEADBEEF) input_array = numpy.array([(8, 1), (2, 1), (5, 1), (7, 4), (4, 0)], dtype=int) def distance(a, b): return numpy.hypot(*(a - b)) eq_(distance(input_array[2], input_array[1]), 3) pairs = zip(input_array[:-1], input_array[1:]) max_distance = max(map(lambda x: distance(x[0], x[1]), pairs)) eq_(max_distance, distance(input_array[0], input_array[1])) def mc_selector(a, b): throw = numpy.random.random_sample() normalized_distance = distance(a, b) * 1.0 / max_distance normalized_distance = normalized_distance ** 2 if throw < math.exp(-normalized_distance): return True return False result = list(generate_random_choices(5, input_array, mc_selector)) eq_( [(list(x[0]), list(x[1])) for x in result], [([8, 1], [2, 1]), ([5, 1], [2, 1]), ([7, 4], [8, 1]), ([8, 1], [7, 4]), ([7, 4], [8, 1])], ) # Make sure we have the same implementation numpy.random.seed(0xDEADBEEF) standard_impl = list(generate_random_choices_exponential(5, input_array)) assert numpy.array_equal(result, standard_impl)
def test_generate_random_choice_weighted(): numpy.random.seed(0xDEADBEEF) input_array = numpy.array( [(8, 1), (2, 1), (5, 1), (7, 4), (4, 0)], dtype=int) def distance(a, b): return numpy.hypot(*(a - b)) eq_(distance(input_array[2], input_array[1]), 3) pairs = zip(input_array[:-1], input_array[1:]) max_distance = max(map(lambda x: distance(x[0], x[1]), pairs)) eq_(max_distance, distance(input_array[0], input_array[1])) def mc_selector(a, b): throw = numpy.random.random_sample() normalized_distance = distance(a, b) * 1./max_distance normalized_distance = (normalized_distance**2) if throw < math.exp(-normalized_distance): return True return False result = list(generate_random_choices(5, input_array, mc_selector)) eq_([(list(x[0]), list(x[1])) for x in result], [([8, 1], [2, 1]), ([5, 1], [2, 1]), ([7, 4], [8, 1]), ([8, 1], [7, 4]), ([7, 4], [8, 1])]) # Make sure we have the same implementation numpy.random.seed(0xDEADBEEF) standard_impl = list(generate_random_choices_exponential(5, input_array)) assert(numpy.array_equal(result, standard_impl))
def test_generate_random_choice(): numpy.random.seed(0xDEADBEEF) eq_(list(generate_random_choices(5, range(10))), [(8, 1), (2, 1), (5, 1), (7, 4), (4, 0)])