Thep Excel

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

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

>_
arr.reshape(newshape)

ความนิยม5/10
ความยาก3/10
ประโยชน์5/10

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าndarray

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

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

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

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 ก็คือแนวคิดเดียวกันครับ

Examples

ตัวอย่างที่ 1: แปลง 1D array ให้เป็น matrix 2×3arr.reshape(2, 3)

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

>_
arr.reshape(2, 3)

ผลลัพธ์[[1 2 3]
[4 5 6]]
ตัวอย่างที่ 2: ใช้ -1 ให้ NumPy คำนวณมิติให้อัตโนมัติarr.reshape(3, -1)

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

>_
arr.reshape(3, -1)

ผลลัพธ์[[ 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 สวยงาม ใช้ทดสอบหรือสาธิตการทำงานของฟังก์ชันอื่นได้เลยโดยไม่ต้องพิมพ์ตัวเลขเองครับ

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

ผลลัพธ์[[ 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() แต่สั้นกว่า

>_
matrix.reshape(-1)

ผลลัพธ์[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

ฟังก์ชันที่ผู้เขียนโยงไว้กับ numpy reshape จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้numpy reshapeTransform
Creation (3)
numpy arange

np.arange ใน NumPy ผมใช้สำหรับสร้าง array ของเลขที่เรียงกันตามช่วงที่กำหนด คล้ายกับ range() ใน Python แต่ได้ผลออกมาเป็น ndarray ที่เอาไปคำนวณทางคณิตศาสตร์ต่อได้ทันที ใช้บ่อยมากตอนสร้างแกน x สำหรับกราฟหรือสร้างชุดตัวเลขทดสอบครับ

numpy array

np.array คือประตูหน้าบ้านของ NumPy ครับ ผมใช้มันแปลง Python list หรือ nested list ให้กลายเป็น ndarray ที่ทำ vectorized operations ได้ทันที โดยไม่ต้องวน loop เองเลยแม้แต่บรรทัดเดียว

numpy zeros

np.zeros ใน NumPy ผมใช้สำหรับสร้าง array ที่เต็มไปด้วยค่า 0 ทุกช่อง คล้ายกับการ "จองที่" ไว้ก่อนแล้วค่อยเติมข้อมูลทีหลัง ใช้บ่อยมากตอน AI ต้องเตรียม array ว่างไว้รับผลลัพธ์หรือสร้าง weight matrix เริ่มต้นครับ

Combine (1)
numpy concatenate

np.concatenate ใช้ต่อ array หลายชุดเข้าด้วยกันตามแกนที่กำหนด คล้ายกับที่ pd.concat ทำกับ DataFrame แต่เป็น NumPy version ที่เร็วกว่าและเหมาะกับข้อมูลตัวเลขล้วนๆ ครับ

Logic (1)
numpy where

numpy.where ผมใช้เลือกค่าจาก array ตามเงื่อนไขที่กำหนดครับ ถ้าให้เทียบง่ายๆ มันคือ IF ใน Excel นั่นแหละ แต่เก่งกว่าตรงที่ทำงานกับข้อมูลทั้ง array พร้อมกันในทีเดียว แถมยังใส่อาร์กิวเมนต์เดียวเพื่อหา index ที่ตรงเงื่อนไขได้อีกด้วย

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่