<p>正如Toan所建议的,一个简单的技巧就是先选择行,然后选择<em>上</em>的列。</p>
<pre><code>>>> a[[0,1,3], :] # Returns the rows you want
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[12, 13, 14, 15]])
>>> a[[0,1,3], :][:, [0,2]] # Selects the columns you want as well
array([[ 0, 2],
[ 4, 6],
[12, 14]])
</code></pre>
<h3>[编辑]内置方法:<a href="http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.ix_.html" rel="noreferrer">^{<cd1>}</a></h3>
<p>我最近发现,numpy为您提供了一个内置的一行程序,让您完全按照@Jaime的建议执行<em>操作,但不必使用广播语法(这是因为缺乏可读性)。从文档中:</p>
<blockquote>
<p>Using ix_ one can quickly construct index arrays that will index the
cross product. <code>a[np.ix_([1,3],[2,5])]</code> returns the array <code>[[a[1,2] a[1,5]], [a[3,2] a[3,5]]]</code>.</p>
</blockquote>
<p>所以你这样使用它:</p>
<pre><code>>>> a = np.arange(20).reshape((5,4))
>>> a[np.ix_([0,1,3], [0,2])]
array([[ 0, 2],
[ 4, 6],
[12, 14]])
</code></pre>
<p>它的工作方式是按照Jaime的建议调整阵列,这样广播就可以正常进行:</p>
<pre><code>>>> np.ix_([0,1,3], [0,2])
(array([[0],
[1],
[3]]), array([[0, 2]]))
</code></pre>
<p>而且,正如MikeC在评论中所说,<code>np.ix_</code>具有返回视图的优势,而我的第一个(预编辑)答案没有返回视图。这意味着您现在可以将<em>分配给索引数组:</p>
<pre><code>>>> a[np.ix_([0,1,3], [0,2])] = -1
>>> a
array([[-1, 1, -1, 3],
[-1, 5, -1, 7],
[ 8, 9, 10, 11],
[-1, 13, -1, 15],
[16, 17, 18, 19]])
</code></pre>