二维矩阵中的python索引

二维矩阵中的python索引,python,python-3.x,numpy,numpy-indexing,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] 但事实并非如此。为什么?如果在切片语法中只指定一个维度,则只会切片一个维度。在NumPy中,索引中的维度通常用、、分隔 对于二维阵列,可以用尺寸1替换行,用尺寸2替换列。在您的示例中,mat[:3]对前3行进行切片。随后的索引器[1:2]对这3行中的第一行进行切片 在第二个示例中,[:3,1

给定以下代码:

import numpy as np
mat = np.arange(1,26).reshape(5,5)
我的理解是以下几行是相同的:

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

但事实并非如此。为什么?

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

对于二维阵列,可以用尺寸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)

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

对于二维阵列,可以用尺寸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)
您的矩阵:

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,1:2]表示:

最多3行

第1列至第2列

结论,主要区别在于第一种方法是在[:3]

你的矩阵之后应用[1:2]:

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,1:2]表示:

最多3行

第1列至第2列

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

原因如下:

> 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]])
原因如下:

> 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]])
mat[x][y]与mat[x,y]相同,仅当x是标量时,即当它在第一维度上选择一项时。mat[x][y]与mat[x,y]相同,仅当x是标量时,即当它在第一维度上选择一项时。