NumPy Array Iterating
อาร์เรย์การวนซ้ำ
การวนซ้ำหมายถึงการผ่านองค์ประกอบทีละรายการ
ในขณะที่เราจัดการกับอาร์เรย์หลายมิติเป็นจำนวน เราสามารถทำได้โดยใช้
for
ลูปพื้นฐานของไพ ธ อน
ถ้าเราวนซ้ำในอาร์เรย์ 1-D มันจะผ่านแต่ละองค์ประกอบทีละรายการ
ตัวอย่าง
วนซ้ำองค์ประกอบของอาร์เรย์ 1-D ต่อไปนี้:
import numpy as np
arr = np.array([1, 2, 3])
for x in arr:
print(x)
วนซ้ำ 2-D Arrays
ในอาร์เรย์ 2 มิติจะผ่านทุกแถว
ตัวอย่าง
วนซ้ำองค์ประกอบของอาร์เรย์ 2 มิติต่อไปนี้:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x
in arr:
print(x)
ถ้าเราวนซ้ำใน อาร์เรย์ n -D อาร์เรย์จะผ่านมิติที่ n-1 ทีละรายการ
ในการคืนค่าจริง สเกลาร์ เราต้องวนซ้ำอาร์เรย์ในแต่ละมิติ
ตัวอย่าง
วนซ้ำในแต่ละองค์ประกอบสเกลาร์ของอาร์เรย์ 2 มิติ:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x
in arr:
for y in x:
print(y)
วนซ้ำ 3-D Arrays
ในอาร์เรย์ 3 มิติ จะผ่านอาร์เรย์ 2 มิติทั้งหมด
ตัวอย่าง
วนซ้ำองค์ประกอบของอาร์เรย์สามมิติต่อไปนี้:
import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9],
[10, 11, 12]]])
for x
in arr:
print(x)
ในการคืนค่าจริง สเกลาร์ เราต้องวนซ้ำอาร์เรย์ในแต่ละมิติ
ตัวอย่าง
วนซ้ำลงไปที่สเกลาร์:
import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9],
[10, 11, 12]]])
for x
in arr:
for y in x:
for z in y:
print(z)
การวนซ้ำอาร์เรย์โดยใช้ nditer()
ฟังก์ชันnditer()
นี้เป็นฟังก์ชันช่วยเหลือที่สามารถใช้ได้ตั้งแต่การทำซ้ำขั้นพื้นฐานไปจนถึงขั้นสูง มันแก้ปัญหาพื้นฐานบางอย่างที่เราเผชิญในการวนซ้ำ มาดูตัวอย่างกัน
วนซ้ำในแต่ละองค์ประกอบสเกลาร์
ในลูปพื้นฐาน การfor
วนซ้ำผ่านแต่ละสเกลาร์ของอาร์เรย์ เราจำเป็นต้องใช้
n
for
ลูป ซึ่งอาจเขียนได้ยากสำหรับอาร์เรย์ที่มีมิติสูงมาก
ตัวอย่าง
วนซ้ำผ่านอาร์เรย์สามมิติต่อไปนี้:
import numpy as np
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
for x in np.nditer(arr):
print(x)
Iterating Array ด้วยประเภทข้อมูลที่แตกต่างกัน
เราสามารถใช้op_dtypes
อาร์กิวเมนต์และส่งผ่านประเภทข้อมูลที่คาดไว้เพื่อเปลี่ยนประเภทข้อมูลขององค์ประกอบขณะวนซ้ำ
NumPy จะไม่เปลี่ยนประเภทข้อมูลขององค์ประกอบแบบแทนที่ (โดยที่องค์ประกอบอยู่ในอาร์เรย์) ดังนั้นจึงต้องการพื้นที่อื่นในการดำเนินการนี้ พื้นที่พิเศษนั้นเรียกว่าบัฟเฟอร์ และเพื่อเปิดใช้งานในเราnditer()
จึงผ่านflags=['buffered']
ตัวอย่าง
วนซ้ำผ่านอาร์เรย์เป็นสตริง:
import numpy as np
arr = np.array([1, 2, 3])
for x in
np.nditer(arr, flags=['buffered'], op_dtypes=['S']):
print(x)
วนซ้ำด้วยขนาดขั้นตอนที่ต่างกัน
เราสามารถใช้การกรองและตามด้วยการวนซ้ำ
ตัวอย่าง
วนซ้ำทุกองค์ประกอบสเกลาร์ของอาร์เรย์ 2 มิติโดยข้าม 1 องค์ประกอบ:
import numpy as np
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
for x in np.nditer(arr[:, ::2]):
print(x)
การวนซ้ำที่แจกแจงโดยใช้ ndenumerate()
การแจงนับหมายถึงการกล่าวถึงหมายเลขลำดับของบางสิ่งทีละรายการ
บางครั้งเราต้องการดัชนีที่สอดคล้องกันขององค์ประกอบในขณะที่วนซ้ำndenumerate()
สามารถใช้เมธอดสำหรับกรณีการใช้งานเหล่านั้นได้
ตัวอย่าง
ระบุองค์ประกอบอาร์เรย์ 1D ต่อไปนี้:
import numpy as np
arr = np.array([1, 2, 3])
for idx, x in
np.ndenumerate(arr):
print(idx, x)
ตัวอย่าง
ระบุองค์ประกอบของอาร์เรย์ 2 มิติต่อไปนี้:
import numpy as np
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
for idx, x in np.ndenumerate(arr):
print(idx, x)