擅长:python、mysql、java
<p>使用一个数组中的值作为另一个数组的索引称为“花式索引”,但是索引操作将对所有行重复:</p>
<pre><code>y = numpy.arange(15).reshape(3,5)
y[:, [0, 2, 3]]
# array([[ 0, 2, 3],
# [ 5, 7, 8],
# [10, 12, 13]])
</code></pre>
<p>如果要单独“每行使用一个索引值”,则需要将该行与索引的关系作为另一个索引:</p>
<pre><code>y[[0, 1, 2], [0, 2, 3]]
# array([ 0, 7, 13])
</code></pre>
<p>由于索引数组<code>m</code>是2D,因此需要告诉NumPy <code>m</code>中这两个维度中的哪个对应于行索引。通过向升序索引中添加另一个空轴(关键字:broadcasting)可以实现这一点,然后</p>
<pre><code>y = numpy.arange(15).reshape(3,5)
m = numpy.array([[0, 1], [1, 2], [2, 3]])
y[numpy.arange(len(m))[:, None], m]
# array([[ 0, 1],
# [ 6, 7],
# [12, 13]])
</code></pre>