np.linspace ใน NumPy ผมใช้สำหรับสร้าง array ของตัวเลขที่กระจายเท่ากันระหว่างค่าเริ่มต้นและค่าสิ้นสุด โดยกำหนดจำนวน point ที่ต้องการพอดี แทนที่จะกำหนด step เหมาะมากสำหรับสร้างแกน x ของกราฟหรือสร้างชุดค่าทดสอบที่ต้องการความแม่นยำสูงครับ
ndarray
คืนเป็น NumPy ndarray ครับ เอาไปคำนวณ vectorized ได้ทันที หรือส่งเข้า matplotlib เป็นแกน x/y ได้เลย ถ้าใส่ retstep=True จะคืนเป็น tuple (array, step) แทน
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| start | float | ค่าเริ่มต้นของช่วง จะรวมอยู่ในผลลัพธ์เสมอครับ | |
| stop | float | ค่าสิ้นสุดของช่วง ถ้า endpoint=True (default) จะรวมค่านี้ด้วย ถ้า endpoint=False จะไม่รวมครับ | |
| [num]ไม่บังคับ | int | 50 | จำนวน point ที่ต้องการในผลลัพธ์ ค่า default คือ 50 ครับ กำหนดตามที่ต้องการได้เลย เช่น 5 หรือ 100 |
| [endpoint]ไม่บังคับ | bool | True | ถ้า True (default) จะรวม stop ในผลลัพธ์ด้วย ถ้า False จะไม่รวม stop — มีประโยชน์ตอนสร้าง array แบบวนรอบเช่นมุม 0–360 องศาครับ |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
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 แทน
ผมบอกว่าต้องการ 5 จุดระหว่าง 0 ถึง 1 NumPy คำนวณระยะห่างให้เองได้ 0.0, 0.25, 0.5, 0.75, 1.0 ครับ ทั้ง start และ stop รวมอยู่ในผลลัพธ์เสมอ นี่คือข้อต่างกับ np.arange ที่ไม่รวม stop
อันนี้คือ use case ที่ผมใช้บ่อยที่สุดครับ สร้าง 6 จุดระหว่าง 0 ถึง 2π เพื่อเอาไปวาดกราฟ ใน production จริงผมมักใช้ 100-200 จุดเพื่อความเรียบ แต่ตัวอย่างนี้ใช้ 6 จุดเพื่อให้เห็นค่าชัดเจนครับ
ผมใช้ endpoint=False เมื่อต้องการสร้างมุม 4 ทิศที่เว้นเท่ากัน 0°, 90°, 180°, 270° ถ้าปล่อย default (endpoint=True) จะได้ 0°, 120°, 240°, 360° ซึ่ง 360° = 0° มันจะซ้ำกันตอนวนรอบครับ
ผมจงใจเปรียบเทียบให้เห็นว่า linspace กำหนดจำนวน point โดยตรง (5 จุดพอดี) ส่วน arange ต้องคำนวณ step เองว่า 0.25 จะได้กี่จุด และต้องระวัง floating point ที่อาจทำให้ได้ 4 หรือ 5 จุดก็ได้ครับ linspace ชัดเจนกว่ามาก
ผมจำง่ายๆ ว่า 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 สวยๆ เลย
ฟังก์ชันที่ผู้เขียนโยงไว้กับ numpy linspace จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
np.arange ใน NumPy ผมใช้สำหรับสร้าง array ของเลขที่เรียงกันตามช่วงที่กำหนด คล้ายกับ range() ใน Python แต่ได้ผลออกมาเป็น ndarray ที่เอาไปคำนวณทางคณิตศาสตร์ต่อได้ทันที ใช้บ่อยมากตอนสร้างแกน x สำหรับกราฟหรือสร้างชุดตัวเลขทดสอบครับ
np.array คือประตูหน้าบ้านของ NumPy ครับ ผมใช้มันแปลง Python list หรือ nested list ให้กลายเป็น ndarray ที่ทำ vectorized operations ได้ทันที โดยไม่ต้องวน loop เองเลยแม้แต่บรรทัดเดียว
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่