2d矩阵中的python索引

时间:2018-06-14 07:57:44

标签: python python-3.x numpy numpy-indexing

给出以下代码:

import numpy as np
mat = np.arange(1,26).reshape(5,5)

我的理解是以下几行相同:

mat[:3][1:2]
mat[:3,1:2]

但他们不是。为什么呢?

3 个答案:

答案 0 :(得分:3)

如果您只在切片语法中指定一个维度,则只会切片一个维度。在NumPy中,索引中的维度通常用","分隔。

对于2d数组,您可以替换" row"用"维度1"和"列"用"维度2"。在您的示例中,mat[:3]对前3行进行切片。随后的索引器[1:2]会对这3行中的第一行进行切片。

在第二个示例中,[:3, 1:2]同时对行和列进行切片。

您可能会发现查看结果的形状会很有帮助:

mat[:3].shape       # (3, 5)
mat[:3][1:2].shape  # (1, 5)
mat[:3,1:2].shape   # (3, 1)

答案 1 :(得分:1)

你的矩阵:

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]])

第一个mat[:3][1:2]将先mat[:3],然后应用[1:2]

mat[:3]
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15]])
# mat[:3][1:2] => array([[ 6,  7,  8,  9, 10]])

第二个(mat[:3,1:2])表示:

排到3

array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15]])

12

 array([[ 2],
       [ 7],
       [12]])

结论,主要区别在于第一个是在[1:2]之后应用[:3]

答案 2 :(得分:0)

原因如下:

> mat

# output:
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]])

> mat[:3] # you are selecting the first 3 rows

#output:
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15]])

> mat[:3][1:2] # you are selecting the second row only

Output:
array([[ 6,  7,  8,  9, 10]])

> mat[:3,1:2] # you are selecting from the first 3 rows and the second column

Output:
array([[ 2],
       [ 7],
       [12]])