<p>让我们来看一个小例子,一个我们可以实际检查和使用的例子</p>
<p>创建结构化数组:</p>
<pre><code>In [32]: dt = np.dtype([('x', int),('y', int) ,('grayVal','u2')])
In [33]: events = np.zeros(5, dt)
In [34]: events['x'] = np.arange(5)
In [35]: events['y'] = np.array([3,4,0,2,1])
In [36]: events['grayVal'] = np.arange(1,6)
</code></pre>
<p>要检查索引,请创建一个漂亮的二维数组:</p>
<pre><code>In [38]: image = np.arange(25).reshape(5,5)
In [39]: image
Out[39]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
</code></pre>
<p>看看<code>ix_</code>产生的-2数组可以相互广播。A(5,1)和(1,5),向(5,5)广播:</p>
<pre><code>In [40]: np.ix_(events['y'], events['x'])
Out[40]:
(array([[3],
[4],
[0],
[2],
[1]]),
array([[0, 1, 2, 3, 4]]))
</code></pre>
<p>使用这些数组对<code>image</code>进行索引只是对值进行洗牌-结果仍然是一个2d数组:</p>
<pre><code>In [41]: image[np.ix_(events['y'], events['x'])]
Out[41]:
array([[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24],
[ 0, 1, 2, 3, 4],
[10, 11, 12, 13, 14],
[ 5, 6, 7, 8, 9]])
</code></pre>
<p>如果我们改为使用数组而不是使用<code>ix_</code>数组进行索引:</p>
<pre><code>In [42]: image[events['y'], events['x']]
Out[42]: array([15, 21, 2, 13, 9])
</code></pre>
<p>这只是用<code>ix_</code>生成的数组的对角线。使用(n,)和(n,)数组进行索引会生成一个(n,)值数组(与<code>ix_</code>(n,n)数组相反)</p>
<p>因此,从零图像开始,我们可以通过以下方式分配值:</p>
<pre><code>In [43]: image= np.zeros((5,5), 'u2')
In [44]: image[events['y'], events['x']]=events['grayVal']
In [45]: image
Out[45]:
array([[0, 0, 3, 0, 0],
[0, 0, 0, 0, 5],
[0, 0, 0, 4, 0],
[1, 0, 0, 0, 0],
[0, 2, 0, 0, 0]], dtype=uint16)
</code></pre>