<p>您可以使用<a href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html" rel="nofollow">^{<cd1>}</a>。首先,让我们制作一些玩具数据(顺便说一句,如果你自己做这部分的话会有帮助):</p>
<pre><code>>>> h = np.random.random((3,4))
>>> nodata = 10
>>> h.flat[[2,3,4,7,8,9]] = 10
>>> ibound = np.random.randint(0,2,(3,4))
>>> L1TopOld = np.ones((3,4))*5
>>> h
array([[ 0.1382408 , 0.7718657 , 10. , 10. ],
[ 10. , 0.5595833 , 0.83703255, 10. ],
[ 10. , 10. , 0.79473842, 0.91882331]])
>>> ibound
array([[0, 1, 1, 0],
[0, 1, 1, 0],
[0, 1, 0, 1]])
>>> L1TopOld
array([[ 5., 5., 5., 5.],
[ 5., 5., 5., 5.],
[ 5., 5., 5., 5.]])
>>> eps = 0.01
</code></pre>
<p>现在我们可以决定要修补哪些:</p>
^{pr2}$
<p>并使用此命令告诉<code>np.where</code>我们要切换的位置:</p>
<pre><code>>>> np.where(ibound & (abs(h - nodata) <= eps), L1TopOld, h)
array([[ 0.1382408 , 0.7718657 , 5. , 10. ],
[ 10. , 0.5595833 , 0.83703255, 10. ],
[ 10. , 5. , 0.79473842, 0.91882331]])
</code></pre>
<p>正如评论中指出的,这假设<code>ibound</code>是一个只由0和1组成的掩码。如果你真的只想改变<code>ibound == 1</code>(例如,不是2)的情况,那也很简单:</p>
<pre><code>>>> np.where((ibound == 1) & (abs(h - nodata) <= eps), L1TopOld, h)
array([[ 0.1382408 , 0.7718657 , 5. , 10. ],
[ 10. , 0.5595833 , 0.83703255, 10. ],
[ 10. , 5. , 0.79473842, 0.91882331]])
</code></pre>
<p>{在这里给出的答案是相同的,因为在cd3中}是相同的</p>