การใช้ Numpy สำหรับสร้างจำนวนตัวเลข linspace และสร้างเมทริกซ์ด้วย meshgrid

Numpy มีคำสั่งที่น่าสนใจในการทดสอบสร้างจำนวนตัวเลขจุดเริ่มต้น และจุดสิ้นสุด พร้อมกำหนดจำนวนตัวเลขได้ ด้วยคำสั่ง linspace อีกทั้งนำค่าที่ได้ มาทำการสร้างให้เป็นรูปแบบเมทริกซ์ด้วยคำสั่ง meshgrid

import numpy as np
import matplotlib.pyplot as plt

#สมมติสร้างสมการเชิงเส้น (Linear Equation) f(x,y) = Ax + By + C  มาทำการทดสอบ
def f(x,y):
    return 2*x+3*y-25

#numpy.linspace(จุดเริ่ม, จุดสิ้นสุด, จำนวน)
nx = np.linspace(0,2,2)
ny = np.linspace(0,2,2)
print(nx,ny)

ผลลัพธ์จะได้เป็น Matrix 2 x 2

ดังนั้น
f(0,0) = -25
f(0,2) = -19
f(2,0) = -21
f(2,2) = -15

หรือ เขียนในรูปแบบ Array ดังนี้

[[-25. -21.]
 [-19. -15.]]

คราวนี้ลองมาเพิ่ม จุดสิ้นสุดเท่ากับ 5 และจำนวนตัวเลข 6 ตัว

nx = np.linspace(0,5,6)
ny = np.linspace(0,5,6)

ผลลัพธ์จะได้เป็น Matrix 6 x 6 จะสังเกตุได้ว่า เมื่อมีการคำนวน f(x,y) แล้วจะถูกเก็บไว้ที่ค่า z

ต่อไปเป็นการวาดกราฟแบบ Heatmap กำหนดให้ aspect ratio =1  หรือเป็นสี่เหลี่ยมสมมาตร

plt.gca(aspect=1)

วาดจุดต่างๆโดยกำหนดสีให้แตกต่างกัน สามารถใช้ได้ทั้ง pcolor หรือ pcolormesh ได้ผลลัพธ์เดียวกัน

plt.pcolor(x,y,z)

ระยะห่างระหว่างจุดสีต่างๆ f(x,y) กับ บาร์ผลลัพธ์(z)

plt.colorbar(pad=0.01)

วาดกราฟ

plt.show()


คราวนี้ลองมาเพิ่ม จุดสิ้นสุดเท่ากับ 10 และจำนวนตัวเลข 100 จะพบว่าจุดสีมีความละเอียดสูงมากขึ้น จนมองด้วยตาเปล่าเป็นลักษณะการเกรเดียน(Gradient) ของสี
nx = np.linspace(0,10,100)
ny = np.linspace(0,10,100)

จากกราฟทำให้เราเข้าใจได้ง่ายมากๆว่าผลลัพธ์(z) ที่ได้มาจากการแทนค่าใน f(x,y) แต่ละโซนนั้นมีค่าอยู่ที่เท่าไหร่ อย่างเช่น -ข้อมูลจากโซนจุด (0,0) จนถึงประมาณ (8,6) จะได้ผลลัพธ์ไม่เกิน -5 จากความเข้าใจนี้สามารถนำไปประยุกต์กับข้อมูลลักษณะแบบนี้ได้อีกมากมาย

มาลอง plot แบบ 3D จะได้ภาพที่เราเห็น 3 แกนได้ชัดขึ้น แต่ใน Jupyter ไม่สามารถหมุนได้ เลยทดสอบด้วย PycharmEDU ก็สามารถหมุนแกนดูรูปร่างมุมต่างๆได้

 

Comments

comments

Share on Google Plus