numpy切片索引后维度的变化

对一个numpy数组或矩阵做切片索引,例如对一列或一行数据进行提取。如果索引值是标量,索引后的量维度减小1。如果索引是一个范围如a:b,则索引后维度不变。

a = np.random.rand(4, 5)

a

Out[13]: 
array([[0.83451584, 0.27220378, 0.84461958, 0.11096957, 0.02921137],
       [0.96256874, 0.7320878 , 0.40411651, 0.28934631, 0.22163871],
       [0.15108374, 0.39559392, 0.11857293, 0.26880925, 0.60808768],
       [0.83220628, 0.39516063, 0.67430698, 0.41871186, 0.06415003]])

b = a[:, 1].shape

b

Out[15]: (4,)

c = a[:, 1:2].shape

c

Out[17]: (4, 1)

d = a[:, [1]].shape

d

Out[19]: (4, 1)

  

看到a是一个二维矩阵,形状是(4, 5)。

b对a的第二列进行索引,索引值是1,是一个标量。所以索引后b的维度降1,形状为(4,)。

c也是对a的第二列进行索引,索引值是1:2,是一个范围,python中上界是取不到的,所以还是索引第二列。但是,此时c的维度是保持原大小仍是2维数据,形状为(4,1)。

d也是对a的第二列进行索引,索引值是[1],是一个范围list(虽然list中仅有一个元素)。但是,此时d的维度是保持原大小仍是2维数据,形状为(4,1)。

因此,在对numpy数组使用索引时应当注意不同情况对应的维度变化,避免后续计算维度的不匹配。

 

原文地址:https://www.cnblogs.com/jiangkejie/p/14110411.html