np.arange ใน NumPy ผมใช้สำหรับสร้าง array ของเลขที่เรียงกันตามช่วงที่กำหนด คล้ายกับ range() ใน Python แต่ได้ผลออกมาเป็น ndarray ที่เอาไปคำนวณทางคณิตศาสตร์ต่อได้ทันที ใช้บ่อยมากตอนสร้างแกน x สำหรับกราฟหรือสร้างชุดตัวเลขทดสอบครับ
np.arange(stop)
np.arange(stop)
ndarray
คืนเป็น NumPy ndarray ครับ เอาไปบวก ลบ คูณ หาร vectorized ได้ทันที หรือส่งเข้า matplotlib เป็น axis ได้เลยโดยไม่ต้อง convert
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| stop | int | float | Yes | ค่าสิ้นสุดของช่วง (ไม่รวมค่านี้ในผลลัพธ์) เช่น np.arange(5) ได้ 0,1,2,3,4 | |
| start | int | float | Optional | 0 | ค่าเริ่มต้นของช่วง ถ้าไม่ใส่จะเริ่มที่ 0 เช่น np.arange(2, 8) ได้ 2,3,4,5,6,7 |
| step | int | float | Optional | 1 | ระยะห่างระหว่างแต่ละค่า ค่า default คือ 1 ใส่ทศนิยมได้ เช่น np.arange(0, 1, 0.2) |
| dtype | dtype | Optional | None | ชนิดข้อมูลของ array ที่ต้องการ เช่น np.float64 ถ้าไม่ใส่จะเดาจากค่า input อัตโนมัติ |
np.arange(5)np.arange(5)
[0 1 2 3 4]
np.arange(10, 21)np.arange(10, 21)
[10 11 12 13 14 15 16 17 18 19 20]
np.arange(0, 1, 0.25)np.arange(0, 1, 0.25)
[0. 0.25 0.5 0.75]
ต่างกันที่ผลลัพธ์ครับ range() คืน iterator ที่ยังไม่ได้สร้างตัวเลขจริงๆ ส่วน np.arange คืน ndarray ที่ทำคณิตศาสตร์ vectorized ได้เลย เช่น np.arange(5) * 2 ได้ [0,2,4,6,8] ในบรรทัดเดียว ถ้าใช้ range() ต้อง list comprehension เพิ่มครับ
เพราะ floating point precision ของคอมพิวเตอร์ครับ เช่น np.arange(0, 0.3, 0.1) อาจให้ค่า 0.1000…01 แทน 0.1 พอดี ถ้าต้องการความแม่นยำสูงผมแนะนำให้ใช้ np.linspace แทน เพราะคำนวณ endpoints แล้วแบ่งเท่ากันเลย
np.arange คือเพื่อนที่ผมโทรหาบ่อยสุดตอนต้องการเลขเรียงชุดนึงมาทำงานด้วยครับ 😎
ฟังก์ชันนี้รับ start, stop, step แล้วสร้าง ndarray ของตัวเลขตั้งแต่ start (รวม) ถึง stop (ไม่รวม) โดยกระโดดทีละ step ใช้ได้กับทั้งเลขจำนวนเต็มและทศนิยม ต่างจาก range() ของ Python ตรงที่ผลลัพธ์เป็น array ที่ทำ vectorized operations ได้เลย ไม่ต้อง convert ก่อน
ที่เจ๋งคือ step ของ np.arange เป็นทศนิยมได้ด้วย เช่น np.arange(0, 1, 0.1) ได้ 10 จุด สิ่งที่ range() ทำไม่ได้เลย ✨
ส่วนตัวผมใช้ arange บ่อยมากตอนวาดกราฟ เช่นสร้างค่า x แล้วส่งเข้า matplotlib หรือสร้างชุดเลขทดสอบให้ฟังก์ชันอื่น ถ้าต้องการจำนวนจุดแน่นอน (เช่น 50 จุดพอดี) ผมจะเปลี่ยนไปใช้ np.linspace แทนครับ