.reshape() เป็น attribute ที่ใช้ในการเปลี่ยน shape ของ array เราสามารถเพิ่ม/ลบ/ดัดแปลง จำนวนสมาชิกและคอลัมน์ของแต่ละแถวในมิติได้โดยไม่แก้ไขค่าของสมาชิกใน array
พูดง่ายๆคือ การเปลี่ยนมิติของ array นั้นๆ
ndarray.reshape
สามารถเปลี่ยนจากมิติใดเป็นมิติใดก็ได้ ตราบใดที่สามารถเอาข้อมูลทั้งหมดออกมาจัดเป็นมิติได้โดยที่ไม่มีตัวใดตกหล่นไป
เช่น หากต้องการเปลี่ยนข้อมูล array 1 มิติ ที่มีจำนวนสมาชิกทั้งหมด 12 ตัว เป็น array 2 มิติ เราก็อาจจะจัดข้อมูล 12 ตัวนี้ให้อยู่ในแถว 3 แถว อันนี้ทำได้ เพราะจะได้แถวละ 4 ตัวพอดี
ทีนี้สมมุติเราต้องการจุดกลุ่มให้มันออกเป็น 5 แถวล่ะ ทำได้ไหม? คำตอบคือ ทำไม่ได้ เพราะถ้าแบ่งออกเป็น 5 แถว แถวแรกจัดได้ 5 ตัว แถวที่สองจัดได้อีก 5 ตัว กลายเป็นทั้งหมด 10 ตัวแล้วอีก 2 ตัวมันเอามาจัดไม่ได้ มันไม่ครบตาราง มันเป็นเศษเกิน
1-D เป็น 2-D
เปลี่ยนจาก 1 มิติเป็น 2 มิติ ให้เอาจำนวนสมาชิกทั้งหมดของ array นั้นหารจำนวนแถวที่ต้องการ หากหารได้ลงตัว หมายความว่าสามารถจัด array นั้นให้อยู่ในแถวนั้นได้พอดี โดยแต่ละแถวจะมีจำนวนคอลัมน์ตามผลหารที่ได้
ตัวอย่าง
จากตัวอย่างใช้ฟังก์ชั่น np.arange() สร้าง array แบบหนึ่งมิติ มีสมาชิกตั้งแต่ 1-20 ทั้งหมด 20 ตัว จากนั้นใช้ attribute reshape() เปลี่ยนมิติเป็น 2 มิติ โดยให้มีแถว 5 แถว แต่ละแถวมีสมาชิก 4 ตัว
1-D เป็น 3-D
การเปลี่ยนจาก 1 มิติ เป็น 3 มิติ ให้คิดก่อนว่าจะจัดข้อมูลทั้งหมดออกเป็นกี่กลุ่ม จากนั้นเอาจำนวนทั้งหมด หารด้วยจำนวนกลุ่มที่คิดว่าจะจัด (ต้องหารได้ลงตัวพอดีจึงจะจัดกลุ่มได้) ผลลัพธ์ที่ได้จากการหาร คือจำนวนสมาชิกในแต่ละกลุ่มว่าแต่ละกลุ่มจะมีสมาชิกกี่ตัว
ขั้นตอนต่อมาคือ การจัดสมาชิกของแต่ละกลุ่มออกเป็นแต่ละแถวเท่าๆกัน
เช่น
จากตัวอย่างใช้ฟังก์ชั่น np.arange() สร้าง array ที่มีค่าตั้งแต่ 1-24 มีสมาชิกทั้งหมด 24 ตัว มี 1 มิติ จากนั้นใช้ attribute reshape() เปลี่ยนมิติเป็น 3 มิติ โดยจัดสมาชิกทั้งหมดออกเป็น 3 กลุ่ม (24/3 = 8) โดยแต่ละกลุ่มจะมีสมาชิกทั้งหมด 8 ตัว จากนั้นจัดสมาชิกออกเป็นกลุ่มละ 2 แถวเท่าๆกัน (8/2 = 4) ในแต่ละแถวจะมีสมาชิก 4 ตัว
เปลี่ยน array ใดๆเป็น 1 มิติ
ใส่ค่า -1 ใน parameter ของ attribute reshape() จะเปลี่ยนมิติใดๆก็ตามของ array นั้นเป็น 1 มิติ
เช่น
ในตัวอย่างเป็นการเปลี่ยน array เดิมจากตัวอย่างที่แล้วที่มี 3 มิติให้กลายเป็น 1 มิติ
Unknown Dimension
NumPy อนุญาตให้เราเว้นค่าใน parameter ของ attribute ได้ 1 ค่า โดยระบบจะคำนวณให้เองว่าค่านั้นต้องเป็นจำนวนเท่าไหร่ โดยให้ใส่ -1 ไว้ใน parameter นั้น
ตัวอย่างเช่น เรามี array หนึ่งอัน เป็น array แบบ 1 มิติ มีสมาชิกทั้งหมด 12 ตัว ต้องการจัด array ให้อยู่ในรูปของ 3 มิติ โดยต้องการแบ่งข้อมูลออกเป็น 3 กลุ่ม (12/3 ลงตัว แปลว่าจัดกลุ่มได้) และแต่ละกลุ่มให้แบ่งออกเป็น 2 แถว เราสามารถใส่ค่าใน parameter ได้ตามตัวอย่างข้างล่างนี้
c = np.arange(1,13).reshape(3,2,-1)
ตัวอย่างผลลัพธ์ที่ได้
ระบบคำนวณให้เอง และจัดให้ว่าแต่ละแถวมีสมาชิกได้ 2 ตัว
ndarray.base
การเป็นเจ้าของข้อมูลคือ ข้อมูลนั้นถูกใช้สำหรับ array นี้อันเดียวเท่านั้น การเปลี่ยนแปลงข้อมูลหรือสมาชิกของข้อมูลใน array นี้จะไม่มีผลต่อ array อื่น และการเปลี่ยนแปลงข้อมูลใน array อื่นจะไม่มีผลต่อ array นี้
สามารถตรวจสอบได้โดยใช้ attribute ndarray.base จะได้คำตอบเป็น boolean
เช่น

สร้าง array ชื่อ c เป็น 1 มิติด้วยฟังชั่น arange() จากตั้งตัวแปร d ให้มีค่าเท่าเป็น array c ที่ใช้ attribute reshape() เปลี่ยนมิติเป็น 3 มิติ
เมื่อใช้คำสั่ง
d.base is None
คือการถามระบบว่า d เป็น base หรือไม่ คือไม่ได้คัดลอก d มาจาก array ไหน คำตอบคือ False เพราะ array d มาจาก array c
d.base is c
ต่อมาเป็นการถามระบบว่า base ของ d คือ c ใช่หรือไม่ คำตอบคือ True
เมื่อมีการคัดลอก array จะมีการคัดลอก 2 แบบ คือแบบ shallow copy และ deep copy