NumPy 数组迭代

วนลูปแนว

วนลูปหมายถึงการวนลูปผ่านองค์ประกอบ

เมื่อเราจัดการกับแนวมาตรฐานใน numpy พวกเราสามารถใช้วนลูปพื้นฐานของ python ที่มีความหมายนี้เพื่อทำการนี้

หากพวกเราวนลูปแนวที่มีขนาด 1 มิติ มันจะวนลูปผ่านแนวทุกๆ องค์ประกอบ

ตัวอย่าง

วนลูปองค์ประกอบของแนวที่มีขนาด 1 มิติ

import numpy as np
arr = np.array([1, 2, 3])
for x in arr:
  print(x)

ปฏิบัติตัวอย่าง

วนลูปแนวที่มีขนาด 2 มิติ

ในแนวที่มีขนาด 2 มิติ มันจะวนลูปผ่านแนวที่มีขนาด 1 มิติทุกๆ แนว

ตัวอย่าง

วนลูปองค์ประกอบของแนวที่มีขนาด 2 มิติต่อไปนี้:

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x in arr:
  print(x)

ปฏิบัติตัวอย่าง

หากพวกเราวนลูปแนวที่มีขนาด n มันจะวนลูปผ่านขนาด 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 มิติ

ในแนวที่มีขนาด 3 มิติ มันจะวนลูปผ่านแนวที่มีขนาด 2 มิติทุกๆ แนว

ตัวอย่าง

วนลูปผ่านองค์ประกอบของแนวที่มีขนาด 3 มิติต่อไปนี้:

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 วนลูปนี้อาจยากที่จะเขียนเมื่อมีแนวที่มีขนาดสูง

ตัวอย่าง

วนลูปผ่านแนวที่มีขนาด 3 มิติต่อไปนี้:

import numpy as np
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
for x in np.nditer(arr):
  print(x)

ปฏิบัติตัวอย่าง

วนลูปสำหรับแนวที่มีประเภทข้อมูลต่างๆ

เราสามารถใช้ 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)

ปฏิบัติตัวอย่าง

วนลูปด้วยระยะทางต่างกัน

เราสามารถใช้การกรองและวนลูปต่อไป

ตัวอย่าง

ในแต่ละการวนลูป ทุกครั้งเราเข้าถึงตัวเลขหนึ่งในแอร์เรย์ 2D และข้ามลงหนึ่งตัวเลข

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)

ปฏิบัติตัวอย่าง

ตัวอย่าง

นับแอร์เอลาย์มองในแอร์เรย์ 2D ดังนี้:

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)

ปฏิบัติตัวอย่าง