按索引排序numpy.array行

3 投票
1 回答
5417 浏览
提问于 2025-04-20 04:01

我有一个二维的 numpy.array 数组和一组索引的元组:

a = array([[0, 0], [0, 1], [1, 0], [1, 1]])
ix = (2, 0, 3, 1)

我想根据这些索引来排序数组的行。期望的结果是:

array([[1, 0], [0, 0], [1, 1], [0, 1]])

我试过用 numpy.take,但是它只在一维数组上按我想的那样工作。

1 个回答

6

其实你可以使用 ndarray.take() 来实现这个功能。关键是要提供第二个参数(axis):

>>> a.take(ix, 0)
array([[1, 0],
       [0, 0],
       [1, 1],
       [0, 1]])

(如果不提供 axis,数组会在取元素之前被压平。)

另外一种方法是:

>>> a[ix, ...]
array([[1, 0],
       [0, 0],
       [1, 1],
       [0, 1]])

撰写回答