<p>下面是一种在一次通过中完成此操作的方法,与这里的其他答案不同,这些答案首先查找最大值,然后搜索最大值</p>
<p>此解决方案在每行中查找最大值的索引,然后为该索引指定0</p>
<pre><code>import numpy as np
x = np.random.uniform(1.0, 21.0, 20)
print("Original array: ", x)
xMatrix = x.reshape(4, 5)
print(xMatrix)
</code></pre>
<p>给予</p>
<blockquote>
<pre><code>xMatrix
Out[28]:
array([[10.10437809, 6.4552141 , 15.1040498 , 1.94380305, 15.27380855],
[12.08934681, 19.20744506, 14.12271304, 8.45470779, 6.2887767 ],
[ 7.74326665, 14.63460522, 12.07651464, 15.80510958, 2.24595519],
[16.12620326, 16.29083185, 7.96133555, 10.61357712, 14.6664017 ]])
</code></pre>
</blockquote>
<p>然后</p>
<pre><code>max_ind = np.argmax(xMatrix, axis=1)
row_ind = np.arange(xMatrix.shape[0])
multi_ind = np.array([row_ind, max_ind])
linear_ind = np.ravel_multi_index(multi_ind, xMatrix.shape)
xMatrix.reshape((-1))[linear_ind] = 0
</code></pre>
<blockquote>
<pre><code>xMatrix
Out[37]:
array([[10.10437809, 6.4552141 , 15.1040498 , 1.94380305, 0. ],
[12.08934681, 0. , 14.12271304, 8.45470779, 6.2887767 ],
[ 7.74326665, 14.63460522, 12.07651464, 0. , 2.24595519],
[16.12620326, 0. , 7.96133555, 10.61357712, 14.6664017 ]])
</code></pre>
</blockquote>