---
title: numpy reshape — เปลี่ยนรูปร่าง array โดยไม่เปลี่ยนข้อมูล
url: https://www.thepexcel.com/functions/python/transform/numpy-reshape/
type: function-explainer
program: Python
syntax: arr.reshape(newshape)
date: 2026-05-31
scores:
  popularity: 5
  difficulty: 3
  usefulness: 5
---

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

> arr.reshape ใน NumPy ผมใช้สำหรับเปลี่ยนรูปร่าง (shape) ของ array โดยจำนวนสมาชิกทั้งหมดยังคงเดิม เช่น

## คำอธิบาย

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

## Syntax

```excel
arr.reshape(newshape)
```

## Arguments

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

## ตัวอย่าง

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

```excel
arr.reshape(2, 3)
```

**ผลลัพธ์:** `[[1 2 3]
 [4 5 6]]`

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

### 2. ตัวอย่างที่ 2: ใช้ -1 ให้ NumPy คำนวณมิติให้อัตโนมัติ

```excel
arr.reshape(3, -1)
```

**ผลลัพธ์:** `[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]`

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

### 3. ตัวอย่างที่ 3: ต่อจาก arange เลย — สร้าง matrix 3×4 ทันที

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

**ผลลัพธ์:** `[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]`

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

### 4. ตัวอย่างที่ 4: แปลง matrix กลับเป็น 1D ด้วย reshape(-1)

```excel
matrix.reshape(-1)
```

**ผลลัพธ์:** `[1 2 3 4 5 6]`

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

## หมายเหตุเพิ่มเติม

- 💡 ผมแนะนำให้ใช้ -1 ในมิติที่คำนวณได้จากอีกมิติเสมอครับ เช่น arr.reshape(-1, 4) แทนที่จะคำนวณแถวเองว่าต้องใส่เท่าไหร่ โค้ดอ่านง่ายกว่าและไม่ error ถ้าขนาดข้อมูลเปลี่ยนทีหลัง

- ส่วนตัวผมใช้ pattern np.arange(n).reshape(r, c) บ่อยมากตอนสร้าง test data หรืออธิบายแนวคิดให้คนอื่น เพราะเห็นชัดว่าตัวเลขเรียงยังไงหลัง reshape ครับ ลอง np.arange(12).reshape(3,4) ดูเป็น warmup ได้เลย

## คำถามที่พบบ่อย

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

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

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

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

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

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

## แหล่งข้อมูลเพิ่มเติม

- [numpy.reshape — NumPy official docs](https://numpy.org/doc/stable/reference/generated/numpy.reshape.html) _(article)_

---

_Source: [https://www.thepexcel.com/functions/python/transform/numpy-reshape/](https://www.thepexcel.com/functions/python/transform/numpy-reshape/)_
