<p>试试这个。在</p>
<pre><code>>>> a
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
>>> b
array([[4, 5],
[6, 7]])
</code></pre>
<p>添加一个轴,以便<code>a</code>可以广播到<code>b</code>上,并测试等价性</p>
^{pr2}$
<p>沿最后一个轴使用<code>np.all</code>,然后沿结果的最后一个轴使用<code>np.any</code>。在</p>
<pre><code>>>> c = np.all(c, axis = -1)
>>> np.any(c, axis = (-1))
array([ True, True], dtype=bool)
>>> d
array([[4, 5],
[9, 8]])
>>> e = a == d[:, np.newaxis, :]
>>> e = np.all(e, axis = -1)
>>> np.any(e, axis = (1,2))
array([ True, False], dtype=bool)
>>>
>>> f
array([[ 2, 3],
[ 8, 10]])
>>> g = a == f[:, np.newaxis, :]
>>> g = np.all(g, axis = -1)
>>> g = np.any(g, axis = -1)
>>> g
array([ True, False], dtype=bool)
>>>
</code></pre>
<p><strong>尝试用不同的方式-解释一下</strong>:</p>
<pre><code>>>> a
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
>>> f
array([[ 2, 3],
[ 8, 10]])
</code></pre>
<ul>
<li>向<code>a</code>(形状为(5,1,2))添加一个轴,使<code>f</code>和
<code>a</code>可广播<em>。在</li>
<li>在等价运算中,<code>f</code>的每个1x2数组将是
与<code>a</code>的每个1x2数组进行比较。在</li>
<li>比较将沿着新的<em>的第三个轴<em>进行
<code>a</code>。在</li>
</ul>
<p>结果是一个5x2x2x2布尔数组(5x1x2 op 2,2->5x2x2x2)。在</p>
<pre><code>>>> g = a[:, np.newaxis, :] == f
>>> g.shape
(5, 2, 2)
</code></pre>
<ul>
<li>你对1x2数组在第三个轴上相等的点感兴趣。在</li>
<li>要相等,两个<em>元素</em>都需要是<code>True</code>。在</li>
<li>沿着第三个轴使用<code>np.all</code>得到一个5x2布尔数组。在</li>
<li>列表示<code>f</code>的每个1x2数组与<code>a</code>的每个1x2数组的比较。在</li>
</ul>
<p>第一列用于<code>f[0] (array([2, 3]))</code>比较,第二列用于<code>f[1]</code>比较。在</p>
<pre><code>>>> g.all(axis = -1)
array([[False, False],
[ True, False],
[False, False],
[False, False],
[False, False]], dtype=bool)
</code></pre>
<p>{1x2>在<cd6}的数组中找到一个,
沿第一个轴使用<code>np.any</code>。在</p>
<pre><code>>>> np.any(g.all(axis = -1), axis = 0)
array([ True, False], dtype=bool)
</code></pre>
<p>要确定<code>a</code>的任何1x2数组是否等于<code>f</code>的1x2数组,
沿第二个轴使用<code>np.any</code>。在</p>
<pre><code>>>> np.any(g.all(axis = -1), axis = 1)
array([False, True, False, False, False], dtype=bool)
>>>
>>> np.any(g.all(axis = -1), axis = 1, keepdims = True)
array([[False],
[ True],
[False],
[False],
[False]], dtype=bool)
</code></pre>
<p>最后,<code>np.zero</code>或{<cd24>}可以给出<code>a</code>行的索引
其中<code>f</code>的1x2元素位于第1行。在</p>
<pre><code>>>> np.nonzero(np.any(g.all(axis = -1), axis = 1))
(array([1]),)
>>>>>> np.nonzero(np.any(g.all(axis = -1), axis = 1, keepdims = True))
(array([1]), array([0]))
</code></pre>
<p>广播:</p>
<ul>
<li><a href="https://github.com/dwf/rescued-scipy-wiki/blob/master/EricsBroadcastingDoc.rst" rel="nofollow">https://github.com/dwf/rescued-scipy-wiki/blob/master/EricsBroadcastingDoc.rst</a></li>
<li><a href="http://scipy-lectures.github.io/intro/numpy/operations.html#broadcasting" rel="nofollow">http://scipy-lectures.github.io/intro/numpy/operations.html#broadcasting</a></li>
</ul>