索引或切片都是根據條件對陣列的元素進行訪問的方法,本節主要介紹一維和二維陣列的元素索引、切片索引及花式索引。
陣列的元素索引方法和python列表的索引方法相同,用整數作為下標可以獲取陣列中的某個元素,且索引初值從0開始計算,一維陣列的索引示例**:
>>>a = np.arange(10)
>>>a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>>a[5]
5
對於二維陣列,索引的第乙個引數表示行號,第二個引數表示列號,如果只有乙個引數,則表示取得整行資料,示例**:
>>>b = np.random.randint(0,10,size=(5,5))
>>>b
array([[0, 1, 7, 8, 1],
[5, 3, 7, 9, 2],
[9, 4, 8, 4, 1],
[6, 5, 9, 5, 9],
[6, 5, 6, 1, 9]])
>>>b[3] #返回陣列b中的第4行所有元素
array([6, 5, 9, 5, 9])
>>>b[3, 2] #取得第4行第3列的元素
9
切片索引與python列表的切片索引不同,通過切片獲取的新的陣列是原陣列的乙個檢視,它與原陣列共享同一塊資料儲存空間。對於一維陣列a,a[3:5]表示用切片獲取陣列的一部分,包括a[3]但不包括a[5];a[:5]切片中省略開始下標,表示從a[0]開始;a[-1]下標中使用負數,表示從陣列最後往前數。示例**:
>>>a[3:5]
array([3, 4])
>>>a[:5]
array([0, 1, 2, 3, 4])
>>>a[:-1]
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
>>>b = a[3:7]
>>>b
array([3, 4, 5, 6])
>>>b[2] = -10
>>>a
array([0, 1, 2, 3, 4, -10, 6, 7, 8, 9])
>>>id(a)
1366555852848
>>>id(b)
1366555852848
注意,在以上的示例中,陣列a通過切片產生新的陣列b,由於b和a共享同一塊資料儲存空間,將陣列b的第2個元素修改為-10後,陣列a對應的元素也發生改變。通過python自帶的物件主碼查詢函式id(),也可以看出陣列a和b代表同乙個物件。
二維陣列的切片索引,示例**:
>>>c = np.arange(24).reshape((4, 6))
>>>c
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]])
>>>c[0:2, 1]
array([1, 7])
>>>c[1, : ] # 取第一行所有元素,等價於c[1]
array([ 6, 7, 8, 9, 10, 11])
>>>c[ :, 1] #取第二列所有元素
array([ 1, 7, 13, 19])
>>>c[:1]
array([[0, 1, 2, 3, 4, 5]])
元素索引和切片索引都侷限於連續區域的值,而花式索引可以選取特定區域的值。
一維陣列的花式索引,示例**:
>>>a = np.arange(10)
>>>a[1:-1:2]
#從第2個元素(1)開始遍歷到最後(-1),第3個引數表示步長,2表示隔乙個元素取乙個元素
array([1, 3, 5, 7])
>>>a[::-1]
#省略切片的開始下標和結束下標,步長為-1,整個陣列頭尾顛倒
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
>>>a[5:1:-2]
#步長為負數時,開始下標必須大於結束下標
array([5, 3])
二維陣列的花式索引,示例**:
>>>b = np.arange(30).reshape((5, 6))
>>>b
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]])
>>>b[2::2,::2] #從第2行開始以步長2開始切片,讀取從第0列開始步長為2的所有列的元素
array([[12, 14, 16],
[24, 26, 28]])
>>>b[[1, 4, 3, 2], [0, 3, 1, 2]] #選出的元素座標為(1, 0),(4, 3),(3, 1),(2, 2)
array([ 6, 27, 19, 14])
>>>b[[1, 4, 3, 2]][:, [0, 3, 1, 2]] #按0、3、1、2列的順序依次顯示1、4、3、2行
array([[ 6, 9, 7, 8],
[24, 27, 25, 26],
[18, 21, 19, 20],
[12, 15, 13, 14]])
此外,ndarray物件也支援布林索引,即返回表示式布林值為真的元素的陣列,示例**:
>>>a = np.arange(10)
>>>a[a < 3] #取得小於3的所有元素
array([0, 1, 2])
pytorch索引與切片
torch會自動從左向右索引 例子 a torch.randn 4,3,28,28 表示類似乙個cnn 的的輸入資料,4表示這個batch一共有4張 而3表示的通道數為3 rgb 28,28 表示的大小 基本索引print a 0 shape torch.size 3,28,28 print a 0...
numpy索引與切片
作用 要獲取陣列的單個元素,指定元素的索引即可 例子 print x 2 3 print x 2 21 22 23 24 25 print x 2 1 22 print x 2,1 22 切片操作是指抽取陣列的一部分元素生成新陣列。對 python列表進行切片操作得到的陣列是原陣列的 副本,而對 n...
Pytorch 索引與切片
引言 本篇介紹pytorch 的索引與切片 123 4567 in 3 a torch.rand 4,3,28,28 in 4 a 0 shape 理解上相當於取第一張 out 4 torch.size 3,28,28 in 5 a 0,0 shape 第0張的第0個通道 out 5 torch.s...