การทำดัชนีของ ndarray สามารถทำได้โดยใช้ไวยากรณ์ python x[obj] มาตรฐาน โดยที่ x คืออาร์เรย์และ obj กับส่วนที่เลือก
การจัดทำดัชนีมีสามประเภท -
- การเข้าถึงภาคสนาม
- การหั่นเบื้องต้น
- การจัดทำดัชนีขั้นสูง
การจัดทำดัชนีแบบใดจะขึ้นอยู่กับ obj ในส่วนนี้ เราจะเน้นไปที่การแบ่งส่วนพื้นฐานและการจัดทำดัชนีขั้นสูงเป็นหลัก
เราสามารถแบ่งการจัดทำดัชนีขั้นสูงออกเป็นสองส่วน -
- การจัดทำดัชนีอาร์เรย์จำนวนเต็ม
- การจัดทำดัชนีบูลีน
การหั่นเบื้องต้น
แนวคิดพื้นฐานของการสไลซ์ของ Python นั้นขยายออกไปในการสไลซ์พื้นฐานเป็น n มิติ เช่นเดียวกับอ็อบเจกต์ python slice ที่สร้างขึ้นโดยให้พารามิเตอร์ start, stop &step แก่ฟังก์ชันสไลซ์ ในการรับเอาต์พุตที่เจาะจง ออบเจ็กต์สไลซ์จะถูกส่งไปยังอาร์เรย์เพื่อแยกส่วนของอาร์เรย์
ตัวอย่างที่ 1
import numpy as np arr = np.arange(25) s = slice(2, 21, 4) print (arr[s])
ผลลัพธ์
[ 2 6 10 14 18]
ในตัวอย่างข้างต้น เราได้สร้างวัตถุ ndarray (arr) โดยใช้ฟังก์ชัน arange() จากนั้นวัตถุชิ้นจะถูกสร้างขึ้นโดยกำหนดค่าเริ่มต้น หยุด และขั้นตอนให้กับวัตถุนั้น เมื่อเราส่งวัตถุสไลซ์ไปยัง ndarray เราจะได้ส่วน (สไลซ์) ของอาร์เรย์ที่เริ่มต้นด้วยดัชนี 2 ถึง 21 โดยมีขั้นตอนที่ 4
อีกวิธีในการเขียนโปรแกรมข้างต้น
# Another way to write above program import numpy as np arr = np.arange(25) s = arr[2:21:4] print (s)
ผลลัพธ์
[ 2 6 10 14 18]
สไลซ์ชิ้นเดียว
#Slice single item from an array import numpy as np arr = np.arange(10) s = arr[9] print(s)
ผลลัพธ์
9
รายการสไลซ์เริ่มต้นจากดัชนี
#slice item starting from index import numpy as np arr = np.arange(10) s = arr[3:] print(s)
ผลลัพธ์
[3 4 5 6 7 8 9]
แบ่งรายการระหว่างดัชนี
#slice item between indexes import numpy as np arr = np.arange(10) s = arr[3: 7] print(s)
ผลลัพธ์
[3 4 5 6]
สองวิธีข้างต้นจะถูกนำไปใช้กับ ndarray หลายมิติเช่นกัน เช่นด้านล่าง −
#slice item between indexes import numpy as np arr = np.array([[[1],[2],[3]], [[4],[5],[6]], [[7], [8], [9]]]) s = arr[1:] print(s)
ผลลัพธ์
[[[4] [5] [6]] [[7] [8] [9]]]
การจัดทำดัชนีขั้นสูง
การจัดทำดัชนีอาร์เรย์จำนวนเต็ม:
มาสร้างอาร์เรย์แบบง่ายที่มีจำนวนเต็มกัน
arr=np.array([[1,2],[3,4],[5,6]]) print(arr)
ผลลัพธ์
[[1 2] [3 4] [5 6]]
ลองเลือกองค์ประกอบเฉพาะจากอาร์เรย์ เช่น องค์ประกอบที่มีดัชนีแถว [0, 1, 2] และดัชนีคอลัมน์ [1, 0, 1] จาก ndarray แบบหลายมิติ
import numpy as np arr=np.array([[1,2],[3,4],[5,6]]) s = arr[[0, 1, 2],[1, 0, 1]] print(s)
ผลลัพธ์
[2 3 6]
การเลือกด้วยดัชนี 0 จะทำให้คุณได้แถวแรก -
>>> arr=np.array([[1,2],[3,4],[5,6]]) >>> print(arr[0]) [1 2]
ในทำนองเดียวกัน เราสามารถเลือกรายการเดียวจากอาร์เรย์ได้ เช่น เลือก 1 เป็นดัชนีแถว และ 1 เป็นองค์ประกอบดัชนีคอลัมน์ซึ่งให้ค่าอาร์เรย์เท่ากับ 4
>>> print(arr[[1], [1]]) [4]
เราสามารถคำนวณการดำเนินการทางคณิตศาสตร์เช่นการบวกและส่งกลับค่าของดัชนีเฉพาะหลังจากทำการบวกแล้ว
>>> print(arr[[1], [1]]+ 1) [5]
ดังที่เราเห็นค่าดัชนีเพิ่มขึ้น 1 แต่อาร์เรย์จริงยังคงเหมือนเดิม
>>> arr array([[1, 2], [3, 4], [5, 6]])
แต่เราสามารถเปลี่ยนค่าของอาร์เรย์และคืนค่าสำเนาใหม่ของอาร์เรย์ได้
>>> arr[[1], [1]] +=1 >>> arr array([[1, 2], [3, 5], [5, 6]])
การจัดทำดัชนีบูลีน
เราใช้การจัดทำดัชนีบูลีนเมื่อผลลัพธ์จะเป็นผลลัพธ์ของการดำเนินการบูลีน
>>> arr=np.array([[0,1,2], [3,4,5], [6,7,8], [9,10,11]]) >>> arr array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]])
ส่งกลับค่าที่เป็น 1.
>>> arr[arr == 1] array([1])
ส่งกลับค่าที่เป็นตัวเลขคู่
>>> arr[arr %2 == 0] array([ 0, 2, 4, 6, 8, 10])