回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<h2>背景</h2>
<p>如果你曾经玩过冒险游戏,你很熟悉掷骰子来决定战斗的结果。如果没有,这里有一个简短的概要:</p>
<p>确定玩家可以摇多少骰子的规则如下:</p>
<ol>
<li>攻击者可以比他国家的军队数量少一个阵亡,最多三个阵亡。你知道吗</li>
<li>防守者可以根据自己国家的军队数量掷骰子,最多两个。你知道吗</li>
</ol>
<p>决定掷骰子结果的规则如下:</p>
<ol>
<li>将最高的攻击者死亡与最高的防御者死亡进行比较。人数少的人就失去一支军队。防守队员打成平局。你知道吗</li>
<li>对第二高的骰子重复此过程。你知道吗</li>
</ol>
<p>如果攻击方或防御方只掷一个骰子,那么总共只损失一支军队;在其他所有情况下,总共损失两支军队。你知道吗</p>
<p>我想分析一下每对模辊的胜负频率。我可以循环所有的可能性,但我对使用<code>ndarrays</code>和切片来进行计算感兴趣。你知道吗</p>
<p>例如,考虑攻击者掷一个骰子,防御者掷一个骰子的场景。我们可以在<code>ndarray</code>中安排所有可能的结果。你知道吗</p>
<pre><code>In [1]: import numpy as np
In [2]: x = np.tile(np.arange(1,7),(6,1))
In [3]: x
Out[3]:
array([[1, 2, 3, 4, 5, 6],
[1, 2, 3, 4, 5, 6],
[1, 2, 3, 4, 5, 6],
[1, 2, 3, 4, 5, 6],
[1, 2, 3, 4, 5, 6],
[1, 2, 3, 4, 5, 6]])
</code></pre>
<p>如果防御者掷骰是列,攻击者掷骰是行,那么防御者获胜的区域就是这个数组的上三角部分</p>
<pre><code>defence_win_region= array([[1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1],
[0, 0, 1, 1, 1, 1],
[0, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 1, 1],
[0, 0, 0, 0, 0, 1]])
</code></pre>
<hr/>
<h2>问题</h2>
<p>如何从<code>x</code>这样的数组中获得<code>defence_win_region</code>这样的数组?为了分析2-1,3-1,3-2,1-2卷,如何将该方法扩展到更高维的数组?你知道吗</p>