擅长:python、mysql、java
<p>我通常在组合蒙版时使用与您类似的循环,可能稍有不同:</p>
<pre><code>combmask = mask_list[0]
for mask in mask_list[1:]:
combmask |= mask
</code></pre>
<p>如果这还不够短,你可以利用你只是<em>或</em>使用面具这一事实,并将它们视为int(它们在引擎盖下面):</p>
^{pr2}$
<p>如果你看一下<code>sum(mask_list)</code>,你会发现它只是一个整数列表。在</p>
<p>关于后一种方法,我不知道的一个可能的警告是,当您试图求和超过255个掩码时,它是否会遇到问题,其中至少有一个(相同的)元素总是<code>True</code>(即<code>1</code>)。存储<code>np.bool</code>的底层整数类型只有8位,这样就可以达到整数限制。也许numpy/Python在继续之前会自动将所有内容转换为16位整数类型,但我不知道这一点。在</p>
<hr/>
<p>编辑:我会留下后一项,但很容易检查:</p>
<pre><code>In [51]: len(mask_list)
Out[51]: 4
In [52]: sum(mask_list).dtype
Out[52]: dtype('int64')
</code></pre>
<p>因此,即使是一个短的掩码列表的总和也被转换成64位整数(然后可以很容易地将其转换为布尔掩码数组),并且您不会轻易地遇到整数限制。在</p>