<pre><code>In [182]: arr = np.arange(12).reshape(3,4)
In [183]: mask = np.array([1,0,1], bool)
In [184]: arr[mask,:]
Out[184]:
array([[ 0, 1, 2, 3],
[ 8, 9, 10, 11]])
In [185]: new = np.zeros_like(arr)
In [186]: new[mask,:] = np.array([10,12,14,16])
In [187]: new
Out[187]:
array([[10, 12, 14, 16],
[ 0, 0, 0, 0],
[10, 12, 14, 16]])
</code></pre>
<p>我怀疑你的错误来自<code>mask</code>的形状:</p>
<pre><code>In [188]: mask1 = mask[:,None]
In [189]: mask1.shape
Out[189]: (3, 1)
In [190]: arr[mask1,:]
-
IndexError Traceback (most recent call last)
<ipython-input-190-6317c3ea0302> in <module>
> 1 arr[mask1,:]
IndexError: too many indices for array
</code></pre>
<p>记住,<code>numpy</code>可以有1d和0d数组;它并不强迫一切都是二维的</p>
<p>有<code>where</code>(又名<code>nonzero</code>):</p>
<pre><code>In [191]: np.nonzero(mask)
Out[191]: (array([0, 2]),) # 1 element tuple
In [192]: np.nonzero(mask1)
Out[192]: (array([0, 2]), array([0, 0])) # 2 element tuple
In [193]: arr[_191] # using the mask index
Out[193]:
array([[ 0, 1, 2, 3],
[ 8, 9, 10, 11]])
</code></pre>