Thep Excel

numpy reshape — เปลี่ยนรูปร่าง array โดยไม่เปลี่ยนข้อมูล

arr.reshape ใน NumPy ผมใช้สำหรับเปลี่ยนรูปร่าง (shape) ของ array โดยจำนวนสมาชิกทั้งหมดยังคงเดิม เช่น แปลง 1D array 12 ตัวให้กลายเป็น matrix 3×4 ได้ทันที โดยไม่ต้องสร้างข้อมูลใหม่ครับ

arr.reshape(newshape)

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

arr.reshape(newshape)

คืนค่า (Returns)
ndarray

คืนเป็น ndarray รูปร่างใหม่ตามที่ระบุครับ ส่วนใหญ่เป็น view ของ array เดิม (ไม่ใช่ copy) ทำให้เร็วมาก เอาไปคำนวณ vectorized ต่อได้ทันที หรือ chain ต่อกับฟังก์ชัน numpy อื่นได้เลย

Argument Type Required Default Description
newshape int | tuple of int Yes รูปร่างใหม่ที่ต้องการ ใส่เป็น tuple เช่น (3, 4) หรือตัวเลขเดียว เช่น 12 สำหรับ 1D — ใส่ -1 ในมิติที่ต้องการให้คำนวณอัตโนมัติได้
order str Optional 'C' ลำดับการอ่านสมาชิก ‘C’ คือ row-major (ค่า default), ‘F’ คือ column-major (Fortran-style), ‘A’ คือ auto ตาม memory layout

Examples

ตัวอย่างที่ 1: แปลง 1D array ให้เป็น matrix 2×3
arr.reshape(2, 3)
ผมมี array 1D 6 ตัว แล้วใช้ reshape(2, 3) แปลงเป็น matrix 2 แถว 3 คอลัมน์ครับ NumPy เรียงตัวเลขแบบ row-major — เติมแถวแรกก่อน [1,2,3] แล้วค่อยไปแถวที่สอง [4,5,6] ผลรวมสมาชิก 2×3=6 เท่ากับของเดิมพอดีครับ
Python Code:

arr.reshape(2, 3)

Result:

[[1 2 3]
[4 5 6]]

ตัวอย่างที่ 2: ใช้ -1 ให้ NumPy คำนวณมิติให้อัตโนมัติ
arr.reshape(3, -1)
ผมบอกแค่ว่าต้องการ 3 แถว แล้วให้ NumPy หาจำนวนคอลัมน์เองโดยใส่ -1 ครับ NumPy คำนวณว่า 12÷3=4 เลยได้ matrix 3×4 อัตโนมัติ มีประโยชน์มากตอนที่รู้แน่แค่มิติเดียว เช่น ตอนต้องการแน่ใจว่าได้ 3 แถวพอดีโดยไม่คำนวณคอลัมน์เองครับ
Python Code:

arr.reshape(3, -1)

Result:

[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]

ตัวอย่างที่ 3: ต่อจาก arange เลย — สร้าง matrix 3×4 ทันที
np.arange(12).reshape(3, 4)
อันนี้คือ pattern ที่ผมใช้บ่อยที่สุดครับ สร้าง array เลข 0–11 ด้วย arange แล้วต่อด้วย .reshape(3,4) ทันทีในบรรทัดเดียว ได้ matrix 3×4 สวยงาม ใช้ทดสอบหรือสาธิตการทำงานของฟังก์ชันอื่นได้เลยโดยไม่ต้องพิมพ์ตัวเลขเองครับ
Python Code:

np.arange(12).reshape(3, 4)

Result:

[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]

ตัวอย่างที่ 4: แปลง matrix กลับเป็น 1D ด้วย reshape(-1)
matrix.reshape(-1)
reshape(-1) คือวิธีที่ผมใช้แปลง matrix ให้กลับเป็น 1D array แบบเร็วที่สุดครับ ใส่แค่ -1 ตัวเดียว NumPy จะรวมทุกแถวเรียงกันให้เลย ได้ [1,2,3,4,5,6] — เหมือน .flatten() แต่สั้นกว่า
Python Code:

matrix.reshape(-1)

Result:

[1 2 3 4 5 6]

FAQs

ถ้าจำนวนสมาชิกไม่ตรงกันจะเกิดอะไรขึ้น?

NumPy จะ raise ValueError ทันทีครับ เช่น array 12 ตัว reshape เป็น (3,5) จะได้ error ว่า ‘cannot reshape array of size 12 into shape (3,5)’ เพราะ 3×5=15 ≠ 12 — ผมเลยแนะนำให้ใช้ -1 ในมิติที่ไม่แน่ใจ จะปลอดภัยกว่าคำนวณเองครับ

reshape กับ resize ต่างกันยังไง?

ต่างกันมากครับ reshape ต้องการจำนวนสมาชิกเท่าเดิมเสมอ ถ้าไม่ตรงจะ error ส่วน np.resize ยืดหยุ่นกว่า — ถ้า shape ใหม่ใหญ่กว่า มันจะ repeat ข้อมูลให้ ถ้าเล็กกว่าก็ตัดทิ้ง ส่วนตัวผมใช้ reshape เกือบตลอดเพราะอยากให้ error ตอนจำนวนไม่ตรง ดีกว่า silent data duplication ครับ

reshape คืน view หรือ copy ของ array เดิม?

ส่วนใหญ่คืน view ครับ หมายความว่า array ใหม่กับเดิมชี้ไปหน่วยความจำเดียวกัน แก้ค่าใน reshape แล้วตัวเดิมก็เปลี่ยนด้วย ถ้าอยากได้ copy จริงๆ ให้ต่อด้วย .copy() เช่น arr.reshape(3,4).copy() ครับ — NumPy อาจบังคับคืน copy ในบางกรณีที่ memory layout ไม่ compatible แต่ safe กว่าคือ explicit .copy() เสมอ

Resources & Related

Additional Notes

reshape คือวิธีที่ผมใช้บ่อยที่สุดตอนต้องเตรียม array ให้พร้อมสำหรับการคำนวณหรือส่งเข้า model ครับ 😎

แนวคิดหลักคือ ข้อมูลทุกตัวใน array ถูกเรียงกันต่อเนื่องในหน่วยความจำแบบ row-major (C-order) — ผมคิดว่ามันเหมือนการพับกระดาษ: ตัวเลขยังอยู่ครบ แค่เปลี่ยนว่าจะพับกี่แถว กี่คอลัมน์ กฎข้อเดียวที่ห้ามทำผิดคือ จำนวนสมาชิกรวมต้องเท่ากันก่อนและหลัง เช่น array 12 ตัว → reshape เป็น (3,4), (4,3), (2,6), (12,1) ได้ทั้งนั้น แต่ reshape เป็น (3,5) ไม่ได้เพราะ 3×5=15 ≠ 12

ที่เจ๋งคือ ใส่ -1 ในมิติที่ยังไม่รู้ได้เลย แล้ว NumPy จะคำนวณให้อัตโนมัติ เช่น arr.reshape(3, -1) แปลว่า “ผมต้องการ 3 แถว คำนวณจำนวนคอลัมน์เองเลย” ✨

ส่วนตัวผมใช้ reshape บ่อยมากตอนทำงานกับ machine learning — เช่น แปลงภาพ 784 pixels ให้เป็น (28,28) หรือแปลง batch ของข้อมูลให้ตรง shape ที่ model ต้องการ ถ้าคุ้นกับ Excel การที่ข้อมูล 1 แถวยาวๆ กลายเป็นตาราง grid ก็คือแนวคิดเดียวกันครับ

Leave a Reply

Your email address will not be published. Required fields are marked *