<p>我对你另一个问题的回答</p>
<p><a href="https://stackoverflow.com/questions/52573733/replace-2d-array-elements-with-zeros-using-a-column-index-vector">Replace 2D array elements with zeros, using a column index vector</a></p>
<p>我们可以使用前面使用的相同索引创建一个布尔<code>mask</code>:</p>
<pre><code>In [124]: mask = np.ones(A.shape, dtype=bool)
In [126]: mask[np.arange(4), B] = False
In [127]: mask
Out[127]:
array([[ True, False, True],
[False, True, True],
[ True, True, False],
[False, True, True]])
</code></pre>
<p>用布尔掩码为数组编制索引会生成一个1d数组,因为在大多数情况下,这样的掩码可以在每一行中选择不同数量的元素。在</p>
^{pr2}$
<p>在这种情况下,可以将结果重塑回二维:</p>
<pre><code>In [129]: A[mask].reshape(4,2)
Out[129]:
array([[28, 52],
[80, 66],
[ 7, 18],
[97, 68]])
</code></pre>
<p>由于您允许使用“基本Python”,下面列出理解答案:</p>
<pre><code>In [136]: [[y for i,y in enumerate(x) if i!=b] for b,x in zip(B,A)]
Out[136]: [[28, 52], [80, 66], [7, 18], [97, 68]]
</code></pre>
<p>如果另一个<code>A</code>中的所有0都来自插入,那么我们还可以使用</p>
<pre><code>In [142]: A!=0
Out[142]:
array([[ True, False, True],
[False, True, True],
[ True, True, False],
[False, True, True]])
</code></pre>