擅长:python、mysql、java
<p>这个答案是为那些不知道numpy数组的人准备的(比如我),感谢MrE提供了numpy文档的指针。在</p>
<p>Numpy数组有这个很好的布尔掩码特性。在</p>
<p>对于numpy数组,大多数运算符返回一个应用于每个元素的操作数组,而不是像普通Python列表那样返回单个结果:</p>
<pre><code>>>> alist = range(10)
>>> alist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist > 5
True
>>> anarray = np.array(alist)
>>> anarray
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> anarray > 5
array([False, False, False, False, False, False, True, True, True, True], dtype=bool)
</code></pre>
<p>您可以使用bool数组作为numpy数组的索引,在本例中,您将获得一个过滤数组,用于对应bool数组元素为True的位置。在</p>
^{pr2}$
<p>掩码不能大于数组:</p>
<pre><code>>>> anotherarray = anarray[mask]
>>> anotherarray
array([6, 7, 8, 9])
>>> anotherarray[mask]
ValueError: too many boolean indices
</code></pre>
<p>因此不能使用比要遮罩的数组大的遮罩:</p>
<pre><code>>>> anotherarray[anarray > 7]
ValueError: too many boolean indices
>>> anotherarray[anotherarray > 7]
array([8, 9])
</code></pre>
<p>由于<code>xorg</code>比<code>x</code>小,基于<code>x</code>的掩码将比<code>xorg</code>长,并得到<code>ValueError</code>异常。在</p>