1. 程式人生 > 實用技巧 >numpy切片索引後維度的變化

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陣列使用索引時應當注意不同情況對應的維度變化,避免後續計算維度的不匹配。