2
我有名單的這樣一個Python字典:如何創建一個函數(迭代/遞歸)在Python中的元組字典上運行?
d = {'A': [(4, 4, 3), [1, 2, 3, 4, 5]],
'B': [(2, 1, 2), [5, 4, 3, 2, 1]],
'C': [(4, 1, 1), [2, 4, 1, 2, 4]]}
我需要創建一個訪問該詞典的元素的公式,併爲每個值[t, l]
:
- 計算的平均
t
(我們稱之爲m
); - 採取隨機樣本
s
,替換長度爲len(t)
,從l
; - 比較
m
與s
平均 -True
如果m
大於s
,False
否則意味着更大; - 重複此過程10,000次
- 返回的時間百分比
m
大於平均值s
。
輸出應該是這樣的:
In [16]: test(d)
Out[16]: {'A': 0.5, 'B': 0.9, 'C': 0.4}
我覺得我不是一個答案,截至目前,這是我曾嘗試:
def test(dict):
def mean_diff(dict):
for k, (v0, v1) in dict.iteritems():
m = np.mean(v0) > (np.mean(npr.choice(v1, size=(1, len(v0)), replace=True)))
return ({k: m})
for k, (v0, v1) in dict.iteritems():
bootstrap = np.array([means_diff(dict) for _ in range(10000)])
rank = float(np.sum(bootstrap))/10000
return ({k: rank})
但是,我得到:
RuntimeError: maximum recursion depth exceeded while calling a Python object
請注意,您應該比作'LEN(TUP)的平均'' - 長度sample':*「這個隨機抽樣的長度是一樣的這個元組的第一個值的長度。「* – jonrsharpe 2014-10-07 15:54:46
如果我理解了原始問題,我認爲我寫它的方式是正確的。對這個問題的確定性答案會產生'{'A':0.6,'B':0.2,'C':0.2}',這與上述代碼產生的概率答案相當接近。 – CoryKramer 2014-10-07 15:58:28
@Cyber如果樣品採取替換,有一個機會,你選擇(1,1,1) – hernanavella 2014-10-07 16:11:42