<p>一个小小的解释变化是,您需要将一次失败标记为<code>1</code>,而将一次胜利标记为<code>0</code>。在</p>
<p>第一步是找到丢失的运行的边缘,(<code>steps</code>+<code>edges</code>)。然后需要计算步骤大小的差异,并将这些值推回到原始数据中。当你得到<code>cumsum</code>的<code>toss2</code>时,它给出了你当前的连败时间。你的赌注是<code>2 ** cumsum(toss2)</code>。在</p>
<p><code>numpy</code>版本比<code>pandas</code>版本快,但该系数取决于<code>N</code>(对于<code>N=100</code>为~8,对于{<cd12>}为~2)。在</p>
<hr/>
<h2>熊猫</h2>
<p>使用<code>pandas.Series</code>:</p>
<pre><code>import pandas as pd
toss = np.random.randint(0,2,100)
toss = pd.Series(toss)
steps = (toss.cumsum() * toss).diff() # mask out the cumsum where we won [0 1 2 3 0 0 4 5 6 ... ]
edges = steps < 0 # find where the cumsum steps down -> where we won
dsteps = steps[edges].diff() # find the length of each losing streak
dsteps[steps[edges].index[0]] = steps[edges][:1] # fix length of the first run which in now NaN
toss2 = toss.copy() # get a copy of the toss series
toss2[edges] = dsteps # insert the length of the losing streaks into the copy of the toss results
bets = 2 ** (toss2).cumsum() # compute the wagers
res = pd.DataFrame({'toss': toss,
'toss2': toss2,
'runs': toss2.cumsum(),
'next_bet': bets})
</code></pre>
<hr/>
<h2>numpy公司</h2>
<p>这是纯粹的<code>numpy</code>版本(我的母语是它)。为了让数组排成一行,<code>pandas</code>为您做了一些精细的工作</p>
^{pr2}$
<hr/>
<h2>熊猫产量</h2>
<pre><code>In [65]: res
Out[65]:
next_bet runs toss toss2
0 1 0 0 0
1 2 1 1 1
2 4 2 1 1
3 8 3 1 1
4 16 4 1 1
5 1 0 0 -4
6 1 0 0 0
7 2 1 1 1
8 4 2 1 1
9 1 0 0 -2
10 1 0 0 0
11 2 1 1 1
12 4 2 1 1
13 1 0 0 -2
14 1 0 0 0
15 2 1 1 1
16 1 0 0 -1
17 1 0 0 0
18 2 1 1 1
19 1 0 0 -1
20 1 0 0 0
21 1 0 0 0
22 2 1 1 1
23 1 0 0 -1
24 2 1 1 1
25 1 0 0 -1
26 1 0 0 0
27 1 0 0 0
28 2 1 1 1
29 4 2 1 1
30 1 0 0 -2
31 2 1 1 1
32 4 2 1 1
33 1 0 0 -2
34 1 0 0 0
35 1 0 0 0
36 1 0 0 0
37 2 1 1 1
38 4 2 1 1
39 1 0 0 -2
40 2 1 1 1
41 4 2 1 1
42 8 3 1 1
43 1 0 0 -3
44 1 0 0 0
45 1 0 0 0
46 1 0 0 0
47 2 1 1 1
48 1 0 0 -1
49 2 1 1 1
50 1 0 0 -1
51 1 0 0 0
52 1 0 0 0
53 1 0 0 0
54 1 0 0 0
55 2 1 1 1
56 1 0 0 -1
57 1 0 0 0
58 1 0 0 0
59 1 0 0 0
60 1 0 0 0
61 2 1 1 1
62 1 0 0 -1
63 2 1 1 1
64 4 2 1 1
65 8 3 1 1
66 16 4 1 1
67 32 5 1 1
68 1 0 0 -5
69 2 1 1 1
70 1 0 0 -1
71 2 1 1 1
72 4 2 1 1
73 1 0 0 -2
74 2 1 1 1
75 1 0 0 -1
76 1 0 0 0
77 2 1 1 1
78 4 2 1 1
79 1 0 0 -2
80 1 0 0 0
81 2 1 1 1
82 1 0 0 -1
83 1 0 0 0
84 1 0 0 0
85 1 0 0 0
86 2 1 1 1
87 4 2 1 1
88 8 3 1 1
89 16 4 1 1
90 32 5 1 1
91 64 6 1 1
92 1 0 0 -6
93 1 0 0 0
94 1 0 0 0
95 1 0 0 0
96 2 1 1 1
97 1 0 0 -1
98 1 0 0 0
99 1 0 0 0
</code></pre>
<hr/>
<h2>numpy输出</h2>
<p>(不同于panadas结果的种子)</p>
<pre><code>(result -> next bet):
w-> 1
l-> 2
w-> 1
w-> 1
l-> 2
w-> 1
l-> 2
w-> 1
l-> 2
l-> 4
w-> 1
l-> 2
w-> 1
l-> 2
l-> 4
w-> 1
w-> 1
w-> 1
l-> 2
l-> 4
l-> 8
w-> 1
l-> 2
l-> 4
w-> 1
l-> 2
l-> 4
w-> 1
w-> 1
l-> 2
w-> 1
w-> 1
w-> 1
w-> 1
l-> 2
l-> 4
w-> 1
w-> 1
l-> 2
l-> 4
l-> 8
w-> 1
w-> 1
l-> 2
l-> 4
w-> 1
w-> 1
w-> 1
w-> 1
w-> 1
w-> 1
l-> 2
w-> 1
l-> 2
w-> 1
l-> 2
w-> 1
w-> 1
w-> 1
w-> 1
w-> 1
w-> 1
l-> 2
l-> 4
l-> 8
l-> 16
w-> 1
l-> 2
l-> 4
w-> 1
w-> 1
w-> 1
w-> 1
l-> 2
w-> 1
w-> 1
l-> 2
w-> 1
w-> 1
w-> 1
l-> 2
w-> 1
w-> 1
w-> 1
w-> 1
w-> 1
w-> 1
l-> 2
l-> 4
l-> 8
w-> 1
w-> 1
l-> 2
l-> 4
l-> 8
w-> 1
l-> 2
l-> 4
w-> 1
l-> 2
</code></pre>