1

给定以下代码:

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

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

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

但他们不是。为什么?

4

3 回答 3

3

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

对于二维数组,您可以将“行”替换为“维度 1”,将“列”替换为“维度 2”。在您的示例中,mat[:3]切片前 3 行。随后的 indexer 对这[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)
于 2018-06-14T08:02:11.633 回答
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]

于 2018-06-14T08:03:19.940 回答
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]])
于 2018-06-14T08:04:34.483 回答