np.linspace ใน NumPy ผมใช้สำหรับสร้าง array ของตัวเลขที่กระจายเท่ากันระหว่างค่าเริ่มต้นและค่าสิ้นสุด โดยกำหนดจำนวน point ที่ต้องการพอดี แทนที่จะกำหนด step เหมาะมากสำหรับสร้างแกน x ของกราฟหรือสร้างชุดค่าทดสอบที่ต้องการความแม่นยำสูงครับ
np.linspace(start, stop, num, endpoint)
np.linspace(start, stop, num, endpoint)
ndarray
คืนเป็น NumPy ndarray ครับ เอาไปคำนวณ vectorized ได้ทันที หรือส่งเข้า matplotlib เป็นแกน x/y ได้เลย ถ้าใส่ retstep=True จะคืนเป็น tuple (array, step) แทน
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| start | float | Yes | ค่าเริ่มต้นของช่วง จะรวมอยู่ในผลลัพธ์เสมอครับ | |
| stop | float | Yes | ค่าสิ้นสุดของช่วง ถ้า endpoint=True (default) จะรวมค่านี้ด้วย ถ้า endpoint=False จะไม่รวมครับ | |
| num | int | Optional | 50 | จำนวน point ที่ต้องการในผลลัพธ์ ค่า default คือ 50 ครับ กำหนดตามที่ต้องการได้เลย เช่น 5 หรือ 100 |
| endpoint | bool | Optional | True | ถ้า True (default) จะรวม stop ในผลลัพธ์ด้วย ถ้า False จะไม่รวม stop — มีประโยชน์ตอนสร้าง array แบบวนรอบเช่นมุม 0–360 องศาครับ |
np.linspace(0, 1, 5)np.linspace(0, 1, 5)
[0. 0.25 0.5 0.75 1. ]
np.linspace(0, 2 * np.pi, 6)np.linspace(0, 2 * np.pi, 6)
[0. 1.25663706 2.51327412 3.76991118 5.02654825 6.28318531]
np.linspace(0, 360, 4, endpoint=False)np.linspace(0, 360, 4, endpoint=False)
[ 0. 90. 180. 270.]
np.linspace(0, 1, 5).shape[0] == len(np.arange(0, 1.001, 0.25))np.linspace(0, 1, 5).shape[0] == len(np.arange(0, 1.001, 0.25))
True
ผมจำง่ายๆ ว่า linspace = กำหนด ‘กี่จุด’ ส่วน arange = กำหนด ‘step เท่าไหร่’ ครับ ถ้าต้องการ 100 จุดระหว่าง 0 ถึง 1 ใช้ linspace(0, 1, 100) ได้เลย แต่ถ้าต้องการเลขกระโดดทีละ 5 ใช้ arange(0, 100, 5) แทน นอกจากนี้ linspace ยังแม่นยำกว่าสำหรับทศนิยมเพราะไม่มีปัญหา floating point drift แบบ arange
ขึ้นอยู่กับงานครับ สำหรับกราฟทั่วไป 50-100 จุดก็พอให้เส้นเรียบสวย ผมมักใช้ 100 เพื่อความ smooth แต่ถ้าเป็นแค่ชุดค่าทดสอบหรือต้องการ debug ก็ใช้ 5-10 จุดก่อนได้ครับ ค่า default 50 เหมาะกับการสร้าง array สำหรับพล็อตกราฟทั่วไปพอดีเลย
ได้เลยครับ ผมมักใช้คู่กับ np.meshgrid เช่น x = np.linspace(-1, 1, 50); y = np.linspace(-1, 1, 50); XX, YY = np.meshgrid(x, y) ก็ได้ grid 50×50 จุดสำหรับวาด contour plot หรือ surface plot สวยๆ เลย
np.linspace คือเครื่องมือที่ผมหยิบมาใช้ทุกครั้งที่ต้องวาดกราฟหรือสร้างชุดตัวเลขที่แม่นยำครับ 😎
แนวคิดหลักต่างจาก np.arange ตรงที่แทนที่จะบอกว่า “กระโดดทีละเท่าไหร่” (step) เราบอกว่า “ต้องการกี่จุด” (num) แทน — NumPy จะคำนวณระยะห่างให้เองและรับประกันว่าค่าแรกกับค่าสุดท้ายตรงกับที่เราบอกเป๊ะ ผลออกมาเป็น ndarray ที่เว้นระยะเท่ากันทุกช่วงครับ
ที่เจ๋งคือ linspace ไม่มีปัญหา floating point drift แบบที่ arange บางทีเจอ เพราะมันคำนวณจากสองปลายทางเข้าหากัน ไม่ได้บวก step สะสมไปเรื่อยๆ ✨
ส่วนตัวผมใช้ linspace แทบทุกครั้งที่วาดกราฟด้วย matplotlib เช่น x = np.linspace(0, 2*np.pi, 100) แล้ว y = np.sin(x) ได้กราฟ sine คลื่นสวยเลยครับ ถ้าต้องการ step แน่นอนเช่น 0.1 ก็เปลี่ยนไปใช้ np.arange แทน