เข้าใจการใช้ `np.meshgrid()` ใน NumPy: ทำไมถึงจำเป็น และจะเกิดอะไรขึ้นถ้าสลับลำดับ?

หากคุณเคยใช้ NumPy ในการวิเคราะห์ข้อมูล การคำนวณทางวิทยาศาสตร์ หรือแม้แต่ใน Machine Learning คุณอาจเคยเจอฟังก์ชัน np.meshgrid() แต่หลายคนยังสงสัยว่า:

  • ทำไมต้องใช้ meshgrid()?
  • ถ้าสลับลำดับ input จะเกิดอะไรขึ้น?
  • ถ้าไม่ใช้ meshgrid() จะเกิดอะไรขึ้น?
  • แล้วมันเกี่ยวข้องกับการ plot หรือการประมวลผลอย่างไร?

บทความนี้จะอธิบายอย่างเข้าใจง่าย พร้อมตัวอย่างจริง


🧠 ทำไมต้องใช้ meshgrid()?

สมมุติว่าคุณอยากจะคำนวณฟังก์ชัน 2 ตัวแปร:

f(x, y) = x^2 + y^2

โดยมี input:

x = [1, 2, 3]
y = [10, 20]

และคุณต้องการผลลัพธ์ทุกคู่ของ x และ y เช่น:
(1,10), (2,10), (3,10), (1,20), (2,20), (3,20)

แค่ array 1 มิติไม่สามารถคำนวณแบบครอบคลุมได้
คุณจำเป็นต้องมี "ตารางพิกัด" ที่ครอบคลุมค่าทุกคู่ — ซึ่ง np.meshgrid() จะสร้างให้โดยอัตโนมัติ


🔧 ตัวอย่าง: ใช้งาน meshgrid()

import numpy as np

x = np.array([1, 2, 3])
y = np.array([10, 20])

X, Y = np.meshgrid(x, y)

ผลลัพธ์:

X = [[1 2 3]
     [1 2 3]]

Y = [[10 10 10]
     [20 20 20]]

ดังนั้น (X[i,j], Y[i,j]) จะให้ค่าทุกพิกัดบนกริด เช่น:
(1,10), (2,10), (3,10)
(1,20), (2,20), (3,20)


📈 ใช้ในการวาดกราฟ 3 มิติ

Z = X**2 + Y**2

และวาดกราฟได้โดย:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis')
plt.show()

หากไม่มี meshgrid() โค้ดนี้จะซับซ้อนมาก


🚫 ถ้าไม่ใช้ meshgrid() จะเป็นยังไง?

ลองทำแบบนี้:

x = np.array([1, 2, 3])
y = np.array([10, 20])
z = x**2 + y**2

จะเกิด error หรือผลลัพธ์ไม่ถูกต้อง เพราะ:

  • x มีขนาด (3,)
  • y มีขนาด (2,)
  • ไม่สามารถทำการคำนวณร่วมกันได้โดยตรง

ถ้าจะทำเอง ต้องใช้ลูป:

z = []
for yi in y:
    for xi in x:
        z.append(xi**2 + yi**2)

แต่แบบนี้:

  • โค้ดยาว
  • ประมวลผลช้า
  • ไม่ใช่แนวทางเวกเตอร์ของ NumPy

✅ ดังนั้น meshgrid() คือทางออกที่เร็วและสวยงามกว่า


🔄 ถ้าสลับลำดับ input จะเกิดอะไรขึ้น?

Y2, X2 = np.meshgrid(y, x)

ผลลัพธ์:

X2 = [[1 1]
      [2 2]
      [3 3]]

Y2 = [[10 20]
      [10 20]
      [10 20]]
  • ขนาดเปลี่ยนเป็น (3, 2) แทน (2, 3)
  • ลำดับของ x และ y ในตารางถูกสลับ
  • ทิศทางกราฟที่วาดก็จะเปลี่ยนไปเช่นกัน

🧭 เคล็ดลับ: ใช้ indexing='ij' เพื่อควบคุมทิศทาง

X, Y = np.meshgrid(x, y, indexing='ij')

จะได้:

  • X เป็นแถว (แนว i)
  • Y เป็นคอลัมน์ (แนว j)

เหมาะสำหรับการประมวลผลเชิงเมทริกซ์


✅ สรุป

แนวคิด ค่าเริ่มต้น (xy) กรณีสลับหรือใช้ ij
ทิศทาง x แนวนอน (คอลัมน์) แนวตั้ง (แถว)
ทิศทาง y แนวตั้ง (แถว) แนวนอน (คอลัมน์)
ขนาด (X, Y) (len(y), len(x)) (len(x), len(y))
ใช้ในกรณี การวาดกราฟ 2D/3D การคำนวณทางเมทริกซ์

🧪 สรุปสุดท้าย

meshgrid() คือเครื่องมือที่ทรงพลังในการ:

  • สร้างกริดพิกัด
  • คำนวณฟังก์ชันหลายตัวแปร
  • ใช้ในการวาดกราฟพื้นผิว กราฟ contour หรือกราฟ矢量

หากคุณไม่ใช้ meshgrid() คุณจะต้องใช้ลูปซ้อนหรือจัดการ broadcasting เอง — ซึ่งช้ากว่าและซับซ้อนโดยไม่จำเป็น


Get in Touch with us

Chat with Us on LINE

iiitum1984

Speak to Us or Whatsapp

(+66) 83001 0222

Related Posts

Our Products