import random random.random() random.random() random.random() %matplotlib inline N = 500 # no of samples x = range(N) y = [random.uniform(-1,1) for i in x] from scitools.std import plot plot(x, y, '+', axis=[0,N-1,-1.2,1.2]) from numpy import random r = random.random() # one no between 0 and 1 r = random.random(size=10000) # array with 10000 numbers r = random.uniform(-1, 10) # one no between -1 and 10 r = random.uniform(-1, 10, size=10000) # array random.uniform(-1, 1) # scalar number import numpy as np np.random.uniform(-1, 1, 100000) # vectorized import random r = random.randint(a, b) # a, a+1, ..., b import numpy as np r = np.random.randint(a, b+1, N) # b+1 is not included r = np.random.random_integers(a, b, N) # b is included import random N = 10000 eyes = [random.randint(1, 6) for i in range(N)] M = 0 # counter for successes: how many times we get 6 eyes for outcome in eyes: if outcome == 6: M += 1 print 'Got six %d times out of %d' % (M, N) print 'Probability:', float(M)/N import sys, numpy as np N = int(sys.argv[1]) eyes = np.random.randint(1, 7, N) success = eyes == 6 # True/False array six = np.sum(success) # treats True as 1, False as 0 print 'Got six %d times out of %d' % (six, N) print 'Probability:', float(M)/N import random random.seed(2) ['%.2f' % random.random() for i in range(7)] ['%.2f' % random.random() for i in range(7)] random.seed(2) # repeat the random sequence ['%.2f' % random.random() for i in range(7)] awards = ['car', 'computer', 'ball', 'pen'] import random random.choice(awards) index = random.randint(0, len(awards)-1) awards[index] random.shuffle(awards) awards[0] # A: ace, J: jack, Q: queen, K: king # C: clubs, D: diamonds, H: hearts, S: spades def make_deck(): ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] suits = ['C', 'D', 'H', 'S'] deck = [] for s in suits: for r in ranks: deck.append(s + r) random.shuffle(deck) return deck deck = make_deck() deck = make_deck() card = deck[0] del deck[0] card = deck.pop(0) # return and remove element with index 0 def deal_hand(n, deck): hand = [deck[i] for i in range(n)] del deck[:n] return hand, deck def deal(cards_per_hand, no_of_players): deck = make_deck() hands = [] for i in range(no_of_players): hand, deck = deal_hand(cards_per_hand, deck) hands.append(hand) return hands players = deal(5, 4) import pprint; pprint.pprint(players) [['D4', 'CQ', 'H10', 'DK', 'CK'], ['D7', 'D6', 'SJ', 'S4', 'C5'], ['C3', 'DQ', 'S3', 'C9', 'DJ'], ['H6', 'H9', 'C6', 'D5', 'S6']] def same_rank(hand, n_of_a_kind): ranks = [card[1:] for card in hand] counter = 0 already_counted = [] for rank in ranks: if rank not in already_counted and \ ranks.count(rank) == n_of_a_kind: counter += 1 already_counted.append(rank) return counter def same_suit(hand): suits = [card[0] for card in hand] counter = {} # counter[suit] = how many cards of suit for suit in suits: # attention only to count > 1: count = suits.count(suit) if count > 1: counter[suit] = count return counter The hand D4, CQ, H10, DK, CK has 1 pairs, 0 3-of-a-kind and 2+2 cards of the same suit. The hand D7, D6, SJ, S4, C5 has 0 pairs, 0 3-of-a-kind and 2+2 cards of the same suit. The hand C3, DQ, S3, C9, DJ has 1 pairs, 0 3-of-a-kind and 2+2 cards of the same suit. The hand H6, H9, C6, D5, S6 has 0 pairs, 1 3-of-a-kind and 2 cards of the same suit. class Deck: def __init__(self, shuffle=True): ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] suits = ['C', 'D', 'H', 'S'] self.deck = [s+r for s in suits for r in ranks] random.shuffle(self.deck) def hand(self, n=1): """Deal n cards. Return hand as list.""" hand = [self.deck[i] for i in range(n)] del self.deck[:n] # alternative: # hand = [self.pop(0) for i in range(n)] return hand def putback(self, card): """Put back a card under the rest.""" self.deck.append(card) class Card: def __init__(self, suit, rank): self.card = suit + str(rank) class Hand: def __init__(self, list_of_cards): self.hand = list_of_cards class Deck: def __init__(self, shuffle=True): ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] suits = ['C', 'D', 'H', 'S'] self.deck = [Card(s,r) for s in suits for r in ranks] random.shuffle(self.deck) def deal(self, n=1): hand = Hand([self.deck[i] for i in range(n)]) del self.deck[:n] return hand def putback(self, card): self.deck.append(card) hand, deck = deal_hand(5, deck) import random import sys N = int(sys.argv[1]) # no of experiments M = 0 # no of successful events for i in range(N): black = random.randint(1, 6) # throw black green = random.randint(1, 6) # throw green if black > green: # success? M += 1 p = float(M)/N print 'probability:', p import sys N = int(sys.argv[1]) # no of experiments import numpy as np r = np.random.random_integers(1, 6, (2, N)) black = r[0,:] # eyes for all throws with black green = r[1,:] # eyes for all throws with green success = black > green # success[i]==True if black[i]>green[i] M = np.sum(success) # sum up all successes p = float(M)/N print 'probability:', p combinations = [(black, green) for black in range(1, 7) for green in range(1, 7)] success = [black > green for black, green in combinations] M = sum(success) print 'probability:', float(M)/len(combinations) import sys N = int(sys.argv[1]) # no of experiments import random start_capital = 10 money = start_capital for i in range(N): money -= 1 # pay for the game black = random.randint(1, 6) # throw black green = random.randint(1, 6) # throw brown if black > green: # success? money += 2 # get award net_profit_total = money - start_capital net_profit_per_game = net_profit_total/float(N) print 'Net profit per game in the long run:', net_profit_per_game import sys N = int(sys.argv[1]) # no of experiments import numpy as np r = np.random.random_integers(1, 6, size=(2, N)) money = 10 - N # capital after N throws black = r[0,:] # eyes for all throws with black green = r[1,:] # eyes for all throws with green success = black > green # success[i] is true if black[i]>green[i] M = np.sum(success) # sum up all successes money += 2*M # add all awards for winning print 'Net profit per game in the long run:', (money-10)/float(N) hat = [] for color in 'black', 'red', 'blue': for i in range(4): hat.append(color) import random index = random.randint(0, len(hat)-1) # random index ball1 = hat[index]; del hat[index] index = random.randint(0, len(hat)-1) # random index ball2 = hat[index]; del hat[index] # or: random.shuffle(hat) # random sequence of balls ball1 = hat.pop(0) ball2 = hat.pop(0) def new_hat(): # make a new hat with 12 balls return [color for color in 'black', 'red', 'blue' for i in range(4)] def draw_ball(hat): index = random.randint(0, len(hat)-1) color = hat[index]; del hat[index] return color, hat # (return hat since it is modified) # run experiments: n = input('How many balls are to be drawn? ') N = input('How many experiments? ') M = 0 # no of successes for e in range(N): hat = new_hat() balls = [] # the n balls we draw for i in range(n): color, hat = draw_ball(hat) balls.append(color) if balls.count('black') >= 2: # two black balls or more? M += 1 print 'Probability:', float(M)/N import random number = random.randint(1, 100) # the computer's secret number attempts = 0 # no of attempts to guess the number guess = 0 # user's guess at the number while guess != number: guess = input('Guess a number: ') attempts += 1 if guess == number: print 'Correct! You used', attempts, 'attempts!' break elif guess < number: print 'Go higher!' else: print 'Go lower!' def MCint(f, a, b, n): s = 0 for i in range(n): x = random.uniform(a, b) s += f(x) I = (float(b-a)/n)*s return I def MCint_vec(f, a, b, n): x = np.random.uniform(a, b, n) s = np.sum(f(x)) I = (float(b-a)/n)*s return I def MCint_area(f, a, b, n, fmax): below = 0 # counter for no of points below the curve for i in range(n): x = random.uniform(a, b) y = random.uniform(0, fmax) if y <= f(x): below += 1 area = below/float(n)*(b-a)*fmax return area from numpy import * def MCint_area_vec(f, a, b, n, fmax): x = np.random.uniform(a, b, n) y = np.random.uniform(0, fmax, n) below = y[y < f(x)].size area = below/float(n)*(b-a)*fmax return area from scitools.std import plot import random np = 4 # no of particles ns = 100 # no of steps positions = zeros(np) # all particles start at x=0 HEAD = 1; TAIL = 2 # constants xmax = sqrt(ns); xmin = -xmax # extent of plot axis for step in range(ns): for p in range(np): coin = random_.randint(1,2) # flip coin if coin == HEAD: positions[p] += 1 # step to the right elif coin == TAIL: positions[p] -= 1 # step to the left plot(positions, y, 'ko3', axis=[xmin, xmax, -0.2, 0.2]) time.sleep(0.2) # pause between moves mean_pos = mean(positions) stdev_pos = std(positions) # "width" of particle cluster # shape of particle cluster: from scitools.std import compute_histogram pos, freq = compute_histogram(positions, nbins=int(xmax), piecewise_constant=True) plot(pos, freq, 'b-') moves = numpy.random.random_integers(1, 2, size=np*ns) moves = 2*moves - 3 # -1, 1 instead of 1, 2 moves.shape = (ns, np) positions = numpy.zeros(np) for step in range(ns): positions += moves[step, :] # can do some statistics: print numpy.mean(positions), numpy.std(positions) def random_walk_2D(np, ns, plot_step): xpositions = numpy.zeros(np) ypositions = numpy.zeros(np) NORTH = 1; SOUTH = 2; WEST = 3; EAST = 4 for step in range(ns): for i in range(len(xpositions)): direction = random.randint(1, 4) if direction == NORTH: ypositions[i] += 1 elif direction == SOUTH: ypositions[i] -= 1 elif direction == EAST: xpositions[i] += 1 elif direction == WEST: xpositions[i] -= 1 return xpositions, ypositions def random_walk_2D(np, ns, plot_step): xpositions = zeros(np) ypositions = zeros(np) moves = numpy.random.random_integers(1, 4, size=ns*np) moves.shape = (ns, np) NORTH = 1; SOUTH = 2; WEST = 3; EAST = 4 for step in range(ns): this_move = moves[step,:] ypositions += where(this_move == NORTH, 1, 0) ypositions -= where(this_move == SOUTH, 1, 0) xpositions += where(this_move == EAST, 1, 0) xpositions -= where(this_move == WEST, 1, 0) return xpositions, ypositions xymax = 3*sqrt(ns); xymin = -xymax # just plot every plot_step steps: if (step+1) % plot_step == 0: plot(xpositions, ypositions, 'ko', axis=[xymin, xymax, xymin, xymax], title='%d particles after %d steps' % \ (np, step+1), savefig='tmp_%03d.png' % (step+1)) import random r = random.random() r = random.uniform(a, b) i = random.randint(a, b) import numpy as np r = np.random.random(n) r = np.random.uniform(a, b, n) i = np.random.randint(a, b+1, n) i = np.random.random_integers(a, b, n) def simulate_one_path(N, x0, p0, M, m): x = zeros(N+1) p = zeros(N+1) index_set = range(0, N+1) x[0] = x0 p[0] = p0 for n in index_set[1:]: x[n] = x[n-1] + p[n-1]/(100.0*12)*x[n-1] # update interest rate p: r = random.randint(1, M) if r == 1: # adjust gamma: r = random.randint(1, 2) gamma = m if r == 1 else -m else: gamma = 0 pn = p[n-1] + gamma p[n] = pn if 1 <= pn <= 15 else p[n-1] return x, p def simulate_n_paths(n, N, L, p0, M, m): xm = zeros(N+1) pm = zeros(N+1) for i in range(n): x, p = simulate_one_path(N, L, p0, M, m) # accumulate paths: xm += x pm += p # compute average: xm /= float(n) pm /= float(n) return xm, pm x0 = 1 # initial investment p0 = 5 # initial interest rate N = 10*12 # number of months M = 3 # p changes (on average) every M months n = 1000 # number of simulations m = 0.5 # adjustment of p