擅长:python、mysql、java
<p>一种解决方案是“归零”出圆周围的所有元素,然后简单地取整个数组的最大值。你的半径是41,在(50,50)中心。在</p>
<p>那你就可以了</p>
<pre><code>import numpy as np
xc, yc = 50, 50
length = 101
radius = 41
y_grid, x_grid = np.ogrid[-xc:length-xc, -yc:length-yc]
mask = x_grid ** 2 + y_grid ** 2 > radius ** 2
</code></pre>
<p>现在创造你的形象。然后找出最小值,并将其设置为边界外的每个值。如果圆外有一个像素大于圆内的最大值,则它现在设置为一个小得多的值。在</p>
^{pr2}$
<p>所以你的形象会像</p>
<p><a href="https://i.stack.imgur.com/P2QjC.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/P2QjC.jpg" alt="enter image description here"/></a></p>
<p>现在就拿最大值</p>
<pre><code>print np.max(x)
6.4648628255130571
</code></pre>
<p>这个解决方案很好,因为它避免了循环,这在很大程度上挫败了使用numpy的初衷。在</p>
<p><strong>编辑</strong>:</p>
<p>很抱歉,你说你需要最大值的指数。上面的解决方案是相同的,只要把指数拆开。在</p>
<pre><code>>>> i, j = np.unravel_index(x.argmax(), x.shape)
>>> print "{} {}".format(i, j)
23 32
>>> np.max(x) == x[i,j]
True
</code></pre>