Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การแบ่งส่วนพื้นฐานและการจัดทำดัชนีขั้นสูงใน NumPy Python


การทำดัชนีของ 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])