在python中索引和切片矩阵

时间:2018-02-27 19:52:03

标签: python slice

 import numpy as np  
A= array([[ 1,  2,  3,  4,  5,  6,  7,  8],
              [ 9, 10, 11, 12, 13, 14, 15, 16],
              [17, 18, 19, 20, 21, 22, 23, 24],
              [25, 26, 27, 28, 29, 30, 31, 32],
              [33, 34, 35, 36, 37, 38, 39, 40],
              [41, 42, 43, 44, 45, 46, 47, 48],
              [49, 50, 51, 52, 53, 54, 55, 56],
              [57, 58, 59, 60, 61, 62, 63, 64]])

我想按此顺序获取(0,4,5,7)行和列 所以o / p看起来像

A=                                                                                       
    1    5    4    8
   33   37   36   40
   25   29   28   32
   57   61   60   64

我试过这个A [(0,4,5,7),(0,4,5,7)],但它给了我错误。

注意:我想在同一矩阵中对其进行切片。

2 个答案:

答案 0 :(得分:2)

您可以分两步进行索引

x = A[:,[0,4,5,7]]
x = x[[0,4,5,7],:]

>>> x
array([[ 1,  5,  6,  8],
       [33, 37, 38, 40],
       [41, 45, 46, 48],
       [57, 61, 62, 64]])

我更改了变量名称,以便保留原始A,但如果您不想这样做,则不必这样做。

或者,在一行中:

x = A[:,[0,4,5,7]][[0,4,5,7],:]

答案 1 :(得分:0)

正如您在上次评论中指出的那样,您也可以使用Numpy advanced indexing

J = np.repeat([[0,4,3,7]], 4, axis=0)
B = A[J.T, J]
>>> B
array([[ 1,  5,  4,  8],
       [33, 37, 36, 40],
       [25, 29, 28, 32],
       [57, 61, 60, 64]])