1. 程式人生 > >花式索引

花式索引

子集 ray res div spa 整數 進行 color arr

花式索引是一個Numpy屬於,指的是利用整數數組進行索引。有一個8*4數組。

 1 In [37]: arr = np.empty((8,4))
 2 
 3 In [38]: for i in range(8):
 4     ...:     arr[i] = i
 5 
 6 In [39]: arr
 7 Out[39]: 
 8 array([[ 0.,  0.,  0.,  0.],
 9        [ 1.,  1.,  1.,  1.],
10        [ 2.,  2.,  2.,  2.],
11        [ 3.,  3.,  3.,  3.],
12        [ 4.,  4.,  4.,  4.],
13 [ 5., 5., 5., 5.], 14 [ 6., 6., 6., 6.], 15 [ 7., 7., 7., 7.]])

為了以特定順序選取行子元素,只需傳入一個用於指定順序的整數列表或者ndarray即可。

 1 In [40]: arr[[4,3,0,6]]
 2 Out[40]: 
 3 array([[ 4.,  4.,  4.,  4.],
 4        [ 3.,  3.,  3.,  3.],
 5        [ 0.,  0.,  0.,  0.],
 6        [ 6.,  6.,  6.,  6.]])
7 8 In [41]: arr[[-3,-5,-7]] 9 Out[41]: 10 array([[ 5., 5., 5., 5.], 11 [ 3., 3., 3., 3.], 12 [ 1., 1., 1., 1.]])

一次傳入多個索引數組會有一點特別。返回的是一個一維數組,其中的元素對應各個索引元素。

 1 In [42]: arr = np.arange(32).reshape((8,4))
 2 
 3 In [43]: arr
 4 Out[43]: 
 5 array([[ 0,  1,  2,  3],
 6        [ 4,  5,  6,  7],
7 [ 8, 9, 10, 11], 8 [12, 13, 14, 15], 9 [16, 17, 18, 19], 10 [20, 21, 22, 23], 11 [24, 25, 26, 27], 12 [28, 29, 30, 31]]) 13 14 In [44]: arr[[1,5,7,2],[0,3,1,2]] 15 Out[44]: array([ 4, 23, 29, 10])

最終選出的是元素(1,0),(5,3),(7,1),(2,2)。

選取矩陣的行列子集應該是矩陣的形式。

1 In [48]: arr[[1,5,7,2]][:,[0,3,1,2]]
2 Out[48]: 
3 array([[ 4,  7,  5,  6],
4        [20, 23, 21, 22],
5        [28, 31, 29, 30],
6        [ 8, 11,  9, 10]])

花式索引跟切片不一樣,是將數據復制到新數組中。

花式索引