การปรับ รูปร่าง NumPy Array
การปรับรูปร่างอาร์เรย์
การปรับรูปร่างหมายถึงการเปลี่ยนรูปร่างของอาร์เรย์
รูปร่างของอาร์เรย์คือจำนวนองค์ประกอบในแต่ละมิติ
โดยการปรับรูปร่างใหม่ เราสามารถเพิ่มหรือลบมิติข้อมูล หรือเปลี่ยนจำนวนองค์ประกอบในแต่ละมิติได้
เปลี่ยนรูปร่างจาก 1-D เป็น 2-D
ตัวอย่าง
แปลงอาร์เรย์ 1-D ที่มี 12 องค์ประกอบต่อไปนี้เป็นอาร์เรย์ 2 มิติ
มิตินอกสุดจะมี 4 อาร์เรย์ แต่ละอันมี 3 องค์ประกอบ:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12])
newarr = arr.reshape(4, 3)
print(newarr)
เปลี่ยนรูปร่างจาก 1-D เป็น 3-D
ตัวอย่าง
แปลงอาร์เรย์ 1-D ที่มี 12 องค์ประกอบต่อไปนี้เป็นอาร์เรย์ 3 มิติ
มิตินอกสุดจะมี 2 อาร์เรย์ที่มี 3 อาร์เรย์แต่ละอันมี 2 องค์ประกอบ:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12])
newarr = arr.reshape(2, 3, 2)
print(newarr)
เราสามารถแปลงร่างเป็นรูปร่างใด ๆ ได้หรือไม่?
ใช่ ตราบใดที่องค์ประกอบที่จำเป็นสำหรับการปรับรูปร่างทั้งสองรูปร่างนั้นเท่ากัน
เราสามารถเปลี่ยนอาร์เรย์ 1D 8 องค์ประกอบเป็น 4 องค์ประกอบในอาร์เรย์ 2D 2 แถวได้ แต่เราไม่สามารถเปลี่ยนรูปร่างเป็นอาร์เรย์ 2D 3 องค์ประกอบ 3 แถว 2D ได้เนื่องจากต้องใช้ 3x3 = 9 องค์ประกอบ
ตัวอย่าง
ลองแปลงอาร์เรย์ 1D ที่มี 8 องค์ประกอบเป็นอาร์เรย์ 2D ที่มี 3 องค์ประกอบในแต่ละมิติ (จะทำให้เกิดข้อผิดพลาด):
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(3, 3)
print(newarr)
ส่งคืน Copy หรือ View?
ตัวอย่าง
ตรวจสอบว่าอาร์เรย์ที่ส่งคืนเป็นสำเนาหรือมุมมอง:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print(arr.reshape(2, 4).base)
ตัวอย่างข้างต้นส่งคืนอาร์เรย์ดั้งเดิม ดังนั้นจึงเป็นมุมมอง
มิติที่ไม่รู้จัก
คุณได้รับอนุญาตให้มีมิติข้อมูล "ที่ไม่รู้จัก" ได้หนึ่งมิติ
หมายความว่าคุณไม่จำเป็นต้องระบุจำนวนที่แน่นอนสำหรับมิติข้อมูลอย่างใดอย่างหนึ่งในวิธีการปรับรูปร่าง
ส่งผ่าน-1
เป็นค่า แล้ว NumPy จะคำนวณตัวเลขนี้ให้คุณ
ตัวอย่าง
แปลงอาร์เรย์ 1D ที่มี 8 องค์ประกอบเป็นอาร์เรย์ 3 มิติด้วยองค์ประกอบ 2x2:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(2, 2, -1)
print(newarr)
หมายเหตุ:เราไม่สามารถส่งผ่าน-1
มากกว่าหนึ่งมิติ
แบนอาร์เรย์
อาร์เรย์ที่แบนราบหมายถึงการแปลงอาร์เรย์หลายมิติเป็นอาร์เรย์ 1 มิติ
เราสามารถใช้reshape(-1)
การทำเช่นนี้
ตัวอย่าง
แปลงอาร์เรย์เป็นอาร์เรย์ 1D:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
newarr
= arr.reshape(-1)
print(newarr)
หมายเหตุ:มีฟังก์ชันมากมายสำหรับเปลี่ยนรูปร่างของอาร์เรย์ใน numpy flatten
และravel
สำหรับการจัดเรียงองค์ประกอบrot90
ใหม่ , flip
, fliplr
, flipud
ฯลฯ สิ่งเหล่านี้อยู่ภายใต้ส่วนระดับกลางถึงขั้นสูงของ numpy