擅长:python、mysql、java
<p>一个干净的方法是使用<a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html" rel="nofollow">^{<cd1>}</a>,它允许我们根据掩码在两个值之间进行选择。在我们的例子中,掩码可以是<code>img32 >= 0.04045</code>,当<code>True</code>时,我们将选择<code>((img32 + 0.055) / 1.055)**2.4</code>,否则使用<code>img32/12.92</code>。</p>
<p>所以,我们会有这样的实现-</p>
<pre><code>np.where( img32 >= 0.04045,((img32 + 0.055) / 1.055)**2.4, img32/12.92 )
</code></pre>
<hr/>
<p>如果您非常关心内存,并且希望将结果写回输入数组中,您可以通过创建和有选择地设置与这两个条件相对应的元素,分三步完成,如-</p>
^{pr2}$
<p>示例案例-</p>
<pre><code>In [143]: img32 = np.random.rand(4,5).astype(np.float32)
In [144]: img32.nbytes
Out[144]: 80
In [145]: mask.nbytes
Out[145]: 20
</code></pre>
<p>因此,我们避免创建一个输出数组,该数组将消耗我们<code>80</code>字节,而是在掩码上使用<code>20</code>字节。因此,在内存上保存输入数组大小的<code>75%</code>。请注意,这可能会导致性能略有下降。</p>