擅长:python、mysql、java
<p>您可以使用布尔数组来指定要更改的值,而不是循环。例如,如果我们有一个数组</p>
<pre><code>>>> a = np.array([[0.1, 0.5, 1], [10, 20, 30], [40, 50, 60]])
>>> a
array([[ 0.1, 0.5, 1. ],
[ 10. , 20. , 30. ],
[ 40. , 50. , 60. ]])
</code></pre>
<p>我们可以用你的逻辑</p>
<pre><code>>>> anew = np.empty_like(a)
>>> anew.fill(1)
>>> anew[a < 1] = 0
>>> anew[(a > 1) & (a < 30)] = 255
>>> anew
array([[ 0., 0., 1.],
[ 255., 255., 1.],
[ 1., 1., 1.]])
</code></pre>
<p>这是因为numpy索引是如何工作的:</p>
<pre><code>>>> a < 1
array([[ True, True, False],
[False, False, False],
[False, False, False]], dtype=bool)
>>> anew[a < 1]
array([ 0., 0.])
</code></pre>
<p>注意:我们并不需要<code>anew</code>您可以对<code>a</code>本身进行操作,但是您必须注意应用程序的顺序,以防您的条件和目标值重叠。你知道吗</p>
<p>注意#2:你的条件意味着如果数组中有一个元素正好是30或更大的值,它将变成1,而不是255。这似乎有点奇怪,但这是你的代码所做的,所以我复制了它。你知道吗</p>