Python 具有所需行列表的切片numpy数组

Python 具有所需行列表的切片numpy数组,python,arrays,numpy,slice,Python,Arrays,Numpy,Slice,我有一个numpy 2d数组a,以及一个行号列表行集合。如何获取新数组B,例如如果行集合=[0,2,5],那么B=[A\u行[0],A\u行[2],A\u行[5] 我想到了这样的事情: def slice_matrix(A, row_set): slice = array([row for row in A if row_num in row_set]) 但是我不知道,我怎样才能得到行数。使用take(): 可以将列表或数组作为索引传递给任何np数组 >>> r =

我有一个numpy 2d数组
a
,以及一个行号列表
行集合
。如何获取新数组
B
,例如如果
行集合=[0,2,5]
,那么
B=[A\u行[0],A\u行[2],A\u行[5]

我想到了这样的事情:

def slice_matrix(A, row_set):
    slice = array([row for row in A if row_num in row_set])
但是我不知道,我怎样才能得到行数。

使用
take()


可以将列表或数组作为索引传递给任何np数组

>>> r = np.random.randint(0,10,(5,5))
>>> r
array([[3, 8, 9, 8, 4],
       [4, 1, 5, 9, 1],
       [3, 6, 8, 8, 0],
       [5, 1, 7, 6, 1],
       [6, 1, 7, 7, 7]])
>>> idx = [0,3,1]
>>> r[idx]
array([[3, 8, 9, 8, 4],
       [5, 1, 7, 6, 1],
       [4, 1, 5, 9, 1]])

速度比较:
take()
更快

In [1]:  m = np.random.random((1000, 2))
         i = np.random.randint(1000, size=500)

         %timeit m[i]
Out[1]:
         10000 loops, best of 3: 27.2 µs per loop

In [2]:  %timeit m.take(i, axis=0)
Out[2]:
         100000 loops, best of 3: 7.24 µs per loop
对于非常大的
m
i

In [1]:  m = np.random.random((1000, 2))
         i = np.random.randint(1000, size=500)

         %timeit m[i]
Out[1]:
         10000 loops, best of 3: 27.2 µs per loop

In [2]:  %timeit m.take(i, axis=0)
Out[2]:
         100000 loops, best of 3: 7.24 µs per loop