<p>NumPy被设计成允许你矢量化你的计算。这通常意味着您应该很少需要使用本机Python进行循环。<a href="https://stackoverflow.com/a/47755647/7954504">Here</a>是矢量化的简短定义。你知道吗</p>
<p>您可以在5行代码中完成此操作:</p>
<pre><code>a = np.random.randint(-50, 50, size=(n, m), dtype=int)
ne = np.abs(a) != np.abs(a).max()
cols = np.nonzero(ne.all(axis=0))[0]
rows = np.nonzero(ne.all(axis=1))[0]
new_a = a[rows[:, None], cols]
print(a)
[[ -2 20 10 10 -25]
[-15 -24 22 -43 -37]
[-48 29 23 -16 23]
[-26 -25 1 -48 -32]
[ 22 15 -24 -24 -40]]
print(new_a)
[[ 20 10 -25]
[-24 22 -37]
[ 15 -24 -40]]
</code></pre>
<p>以下是上述内容的演练:</p>
<p>与使用嵌套for循环创建<code>a</code>不同,我们可以直接将其大小(实际上是形状)指定为元组。它是一个(nxm)数组。你知道吗</p>
<p><code>ne</code>是与<code>a</code>形状相同的数组。只有在满足条件的地方,给定单元格的最大值等于整个数组的最大绝对值。(如果我的解释不对,你应该可以很容易地修改。)</p>
<pre><code>[[ True True True True True]
[ True True True True True]
[False True True True True]
[ True True True False True]
[ True True True True True]]
</code></pre>
<p>现在我们需要分别包含所有<code>True</code>的行和列的索引</p>
<pre><code>print(rows)
[0 1 4]
print(cols)
[1 2 4]
</code></pre>
<p>最后,您可以使用一点<a href="https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#advanced-indexing" rel="nofollow noreferrer">advanced indexing</a>在这两个一维数组上同时切片<code>a</code>。你知道吗</p>