我創建了一個有效地從52張牌組中隨機發牌的類。然後我寫了幾行來模擬52Ks的100K模擬,因爲我想知道分發是否正確執行。當我這樣做時,我意識到它運行SIM卡需要87秒。對我來說這似乎很長時間。有人可以指出#2中的一些東西可能會讓它變得如此緩慢嗎?優化類模擬代碼?
import time
import random as rand
import numpy as np
class PlayingCard:
ranks = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
suits = ['Spades', 'Hearts', 'Clubs', 'Diamonds']
def __init__(self, rank = None, suit = None):
if rank is None: self.rank = PlayingCard.ranks[rand.randint(0,12)]
elif rank in PlayingCard.ranks: self.rank = rank
else: raise NameError('Invalid rank')
if suit is None: self.suit = PlayingCard.suits[rand.randint(0,3)]
elif suit in PlayingCard.suits: self.suit = suit
else: raise NameError('Invalid suit')
def identity(self):
return (self.rank,self.suit)
#2
start = time.clock()
deck = zip(PlayingCard.ranks*4,PlayingCard.suits*13)
mat = [[PlayingCard().identity() for x in range(52)] for y in range(100000)]
res = [[(y.count(x)/52.0) for x in deck] for y in mat]
mean = [np.mean([res[y][x] for y in range(len(res))]) for x in range(52)]
end = time.clock() - start
print end
87秒實例超過500億個對象(然後通過名單做超過500億次搜索)似乎並不*那*瘋了。 – Amber
創建'5,200,000'類實例不會很快。擺脫你的課堂。 – Blender