3 3 索引與切片

2021-08-03 23:07:03 字數 3051 閱讀 9163

索引或切片都是根據條件對陣列的元素進行訪問的方法,本節主要介紹一維和二維陣列的元素索引、切片索引及花式索引。

陣列的元素索引方法和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...