numpy之-簡單,複雜分片索引

接上篇文章繼續。 本章主要說明python中有高級索引分片功能,能夠直接使用系統函數,也可使用下標索引。python

1. 普通索引獲取ndarray對象中的部分元素:
  • 使用系統函數slice(start,stop,step)
>>> a = np.arange(1,10)
>>> a
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> s = slice(2,8,1)
>>> print(a[s])
[3 4 5 6 7 8]
>>> s = slice(2,8,2)
>>> print(a[s])
[3 5 7]
>>> 

複製代碼
  • 使用下標做爲標識,一維的數據:
>>> a = np.arange(1,10)
>>> a[1:5:1]
array([2, 3, 4, 5])
>>> a[1:5:2]
array([2, 4])
>>> a[3]
4
>>> a[3:]
array([4, 5, 6, 7, 8, 9])
>>> a[3::2]
array([4, 6, 8])
複製代碼
  • 二維數據(每一個列表做爲一個元素)
>>> a = np.arange(20).reshape(4,5)
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
>>> a[::2]
array([[ 0,  1,  2,  3,  4],
       [10, 11, 12, 13, 14]])
>>> a[1:1]
array([], shape=(0, 5), dtype=int64)
>>> a[1:2]
array([[5, 6, 7, 8, 9]])
複製代碼
  • 使用... 標識一個維度下的全部記錄都選中:
>>> a = np.arange(20).reshape(4,5)
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
>>> a[...,2]
array([ 2,  7, 12, 17])
>>> a[2,...]
array([10, 11, 12, 13, 14])
複製代碼
2. 高級索引獲取某個位置的元素:
  • 使用列表對應ndarray對象中的元素
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
>>> a[[1,2,3],[2,3,4]]
array([ 7, 13, 19])
>>> 

複製代碼
  • 使用ndarray對象獲取元素
>>> a
array([[ 0,  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, 26, 27, 28, 29]])
>>> i = np.array([[1,2],[3,4]],dtype='int')
>>> j = np.array([[2,1],[4,3]],dtype='int')
>>> a[i,j]
array([[ 8, 13],
       [22, 27]])
複製代碼
  • 使用普通索引使用的參數類型
>>> i = a[1:4,2:5]
>>> j = a[1:3,4:6]
>>> k = a[1,3,4,...]
>>> i
array([[ 8,  9, 10],
       [14, 15, 16],
       [20, 21, 22]])
>>> j
array([[10, 11],
       [16, 17]])
>>> k
array([[ 6,  7,  8,  9, 10, 11],
       [18, 19, 20, 21, 22, 23],
       [24, 25, 26, 27, 28, 29]])
複製代碼
  • 布爾值類型的索引
>>> k[k>4]
array([ 6,  7,  8,  9, 10, 11, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
       29])
複製代碼
  • 指定下標索引,包括正序和倒敘索引,多個索引數組(使用np.ix_)
>>> k
array([[ 6,  7,  8,  9, 10, 11],
       [18, 19, 20, 21, 22, 23],
       [24, 25, 26, 27, 28, 29]])
>>> k[[1,2]]
array([[18, 19, 20, 21, 22, 23],
       [24, 25, 26, 27, 28, 29]])
>>> k[[-1,-2]]
array([[24, 25, 26, 27, 28, 29],
       [18, 19, 20, 21, 22, 23]])
>>> 
>>> k[np.ix_([1,2],[3,4])]
array([[21, 22],
       [27, 28]])
複製代碼
相關文章
相關標籤/搜索