NumPy linspace(): วิธีสร้างอาร์เรย์ของตัวเลขที่เว้นระยะเท่ากัน

เผยแพร่แล้ว: 2022-04-11

บทช่วยสอนนี้จะสอนวิธีใช้ NumPy linspace() เพื่อสร้างอาร์เรย์ของตัวเลขที่เว้นระยะเท่ากันใน Python

คุณจะได้เรียนรู้ไวยากรณ์ของ NumPy linspace() ตามด้วยตัวอย่างที่จะช่วยให้คุณเข้าใจวิธีใช้งาน

หมายเหตุ: หากต้องการทำตามบทช่วยสอนนี้ คุณต้องติดตั้ง Python และ NumPy

ยังไม่มี NumPy? เราได้รวบรวมคู่มือการติดตั้งฉบับย่อไว้ให้คุณแล้ว

เริ่มกันเลย!

ติดตั้งและนำเข้า NumPy

ก่อนเริ่มบทช่วยสอน ให้ดำเนินการตามขั้นตอนต่างๆ เพื่อติดตั้งไลบรารี NumPy อย่างรวดเร็ว

หากคุณได้ติดตั้ง NumPy แล้ว โปรดข้ามไปยังส่วนถัดไป

  • หากคุณกำลังใช้ Google Colab ซึ่งเป็นสภาพแวดล้อมโน้ตบุ๊ก Jupyter บนคลาวด์ คุณสามารถนำเข้า NumPy และเริ่มเขียนโค้ดได้ทันที (แนะนำสำหรับบทช่วยสอนนี้ )
  • หากคุณต้องการตั้งค่าสภาพแวดล้อมการทำงานในพื้นที่ ฉันแนะนำให้ติดตั้ง Python แจกจ่าย Anaconda Anaconda มาพร้อมกับแพ็คเกจที่มีประโยชน์มากมายที่ติดตั้งไว้ล่วงหน้า คุณสามารถดาวน์โหลดตัวติดตั้งสำหรับระบบปฏิบัติการของคุณได้ ขั้นตอนการตั้งค่าใช้เวลาเพียงไม่กี่นาที
  • หากคุณได้ติดตั้ง Python บนคอมพิวเตอร์ของคุณแล้ว คุณยังสามารถติดตั้ง Anaconda distribution ได้ คุณสามารถใช้ conda หรือ pip เพื่อติดตั้งและจัดการแพ็คเกจ คุณสามารถเรียกใช้คำสั่งใดคำสั่งหนึ่งต่อไปนี้จากพรอมต์คำสั่งของ Anaconda เพื่อติดตั้ง NumPy
 # Install NumPy using conda conda install numpy # Install NumPy using pip pip install numpy

ในขั้นตอนต่อไป ให้นำเข้า numpy ภายใต้นามแฝง np โดยเรียกใช้คำสั่งต่อไปนี้ การทำเช่นนี้จะช่วยให้คุณอ้างอิง NumPy เป็น np โดยไม่ต้องพิมพ์ numpy ทุกครั้งที่คุณเข้าถึงรายการในโมดูล

 import numpy as np

ต่อจากนี้ไป เราจะใช้เครื่องหมายจุดเพื่อเข้าถึงฟังก์ชันทั้งหมดในไลบรารี NumPy ดังนี้: np.<func-name>

กรณีสำหรับจำนวนที่เว้นระยะเท่ากัน

เมื่อคุณทำงานกับอาร์เรย์ NumPy มีบางครั้งที่คุณจำเป็นต้องสร้างอาร์เรย์ของตัวเลขที่เว้นระยะห่างเท่าๆ กันในช่วงเวลาหนึ่ง

ก่อนที่เราจะไปไกลกว่านี้ เรามาดูฟังก์ชันที่คล้ายกันอีกอย่างรวดเร็ว np.arange()

NumPy linspace () กับ NumPy arange ()

หากคุณเคยใช้ NumPy มาก่อน คุณอาจเคยใช้ np.arange() เพื่อสร้างอาร์เรย์ของตัวเลขภายในช่วงที่ระบุ

คุณทราบดีว่า np.arange(start, stop, step) คืนค่าอาร์เรย์ของตัวเลขตั้งแต่ start up ถึง แต่ไม่รวม stop ในขั้นตอนของ step ; ขนาดขั้นตอนเริ่มต้นคือ 1

อย่างไรก็ตาม ค่าของ ขั้นตอน อาจไม่ชัดเจนเสมอไป มาดูกันว่าทำไมถึงเป็นเช่นนี้

ตัวอย่างเช่น หากคุณต้องการตัวเลขที่เว้นระยะเท่ากัน 4 ตัวระหว่าง 0 ถึง 1 คุณทราบดีว่าขนาดขั้นตอนต้องเป็น 0.25 แต่ถ้าคุณใช้ np.arange() จะไม่รวมค่าหยุดที่ 1 ดังนั้น คุณจะต้องเลือกช่วงเวลาที่เกินค่าหยุด

รูปภาพต่อไปนี้แสดงตัวอย่างเพิ่มเติมสองสามตัวอย่างซึ่งคุณต้องการจุดเว้นระยะห่างเท่าๆ กันในช่วง [a, b]

numpy-linspace
จุดที่เว้นระยะเท่ากันในช่วงเวลา

ตัวอย่างแรกของเราที่มีจุดเว้นระยะเท่ากัน 4 จุดใน [0,1] นั้นง่ายพอสมควร คุณรู้ว่าขนาดขั้นระหว่างจุดควรเป็น 0.25

สมมติว่าคุณมีตัวอย่างที่เกี่ยวข้องมากขึ้นเล็กน้อย—ซึ่งคุณต้องระบุจุดเว้นระยะห่างเท่าๆ กัน 7 จุดระหว่าง 1 ถึง 33 ในที่นี้ ขนาดขั้นตอนอาจไม่ชัดเจนนักในทันที อย่างไรก็ตาม คุณสามารถคำนวณมูลค่าของ step ในกรณีนี้ได้ด้วยตนเอง

อย่างไรก็ตาม np.linspace() อยู่ที่นี่เพื่อทำให้ง่ายยิ่งขึ้นสำหรับคุณ!

use-numpy-linspace
ใช้ NumPy linspace

เมื่อใช้ np.linspace() คุณเพียงแค่ระบุจำนวนจุดในช่วงเวลา โดยไม่ต้องกังวลเกี่ยวกับขนาดขั้นตอน และคุณจะได้อาร์เรย์กลับมาตามต้องการ

ด้วยแรงจูงใจนี้ เรามาเรียนรู้ไวยากรณ์ของ NumPy linspace() กันในหัวข้อถัดไป

ไวยากรณ์ของ NumPy linspace()

ไวยากรณ์สำหรับการใช้ NumPy linspace() แสดงอยู่ด้านล่าง:

 np.linspace(start, stop, num, endpoint, retstep, dtype, axis)

ในตอนเริ่มต้น ไวยากรณ์ข้างต้นอาจดูซับซ้อนมากด้วยพารามิเตอร์จำนวนมาก

อย่างไรก็ตาม ส่วนใหญ่เป็นพารามิเตอร์ ทางเลือก และเราจะมาถึงไวยากรณ์ที่ง่ายกว่ามากในเวลาเพียงไม่กี่นาที

เริ่มจากการแยกวิเคราะห์ไวยากรณ์ด้านบนนี้:

  • start และ stop คือจุดเริ่มต้นและจุดสิ้นสุดของช่วงเวลาตามลำดับ ทั้ง start และ stop อาจเป็นสเกลาร์หรืออาร์เรย์ก็ได้ เราจะจำกัดตัวเองให้อยู่ที่ค่าเริ่มต้นและสิ้นสุดแบบสเกลาร์ในบทช่วยสอนนี้
  • num คือจำนวนจุดที่เว้นระยะเท่ากัน และเป็นพารามิเตอร์ทางเลือกที่มีค่าเริ่มต้นเป็น 50
  • endpoint ยังเป็นพารามิเตอร์ทางเลือกที่สามารถเป็น True หรือ False
  • ค่าเริ่มต้นคือ True ซึ่งหมายความว่าจุดสิ้นสุดจะรวมอยู่ในช่วงเวลาโดยค่าเริ่มต้น อย่างไรก็ตาม คุณสามารถตั้งค่าเป็น เท็จ เพื่อยกเว้นจุดสิ้นสุดได้
  • retstep เป็นพารามิเตอร์ทางเลือกอีกตัวหนึ่งที่ใช้บูลีนจริงหรือเท็จ เมื่อตั้งค่าเป็น True ค่าขั้นตอนจะถูกส่งคืน
  • dtype คือชนิดข้อมูลของตัวเลขในอาร์เรย์ โดยทั่วไปประเภทจะอนุมานว่าเป็นทศนิยมและไม่จำเป็นต้องระบุอย่างชัดเจน
  • axis เป็นพารามิเตอร์ทางเลือกอีกตัวที่แสดงถึงแกนตามที่ควรเก็บตัวเลข และสิ่งนี้จะเกี่ยวข้องก็ต่อเมื่อค่า start และ stop เป็นอาร์เรย์เอง

️ แล้ว np.linspace() ส่งคืนอะไร

ส่งกลับอาร์เรย์ N มิติของตัวเลขที่เว้นระยะเท่ากัน และหากตั้งค่าพารามิเตอร์ retstep เป็น True ก็จะคืนค่าขนาดขั้นตอนด้วย

จากการสนทนาจนถึงตอนนี้ นี่คือไวยากรณ์ที่ง่ายขึ้นเพื่อใช้ np.linspace() :

 np.linspace(start, stop, num)

บรรทัดของโค้ดด้านบนจะคืนค่าอาร์เรย์ของ num ที่เว้นระยะห่างเท่ากันในช่วงเวลา [start, stop]

เมื่อคุณรู้ไวยากรณ์แล้ว มาเริ่มโค้ดตัวอย่างกัน

วิธีสร้างอาร์เรย์ที่เว้นระยะเท่ากันด้วย NumPy linspace()

#1. ในตัวอย่างแรกของเรา ให้สร้างอาร์เรย์ของตัวเลขที่เว้นระยะเท่ากัน 20 ตัวในช่วงเวลา [1, 5]

คุณสามารถระบุค่าของ start , stop และ num เป็นอาร์กิวเมนต์ของคีย์เวิร์ด ซึ่งแสดงในเซลล์รหัสด้านล่าง:

 import numpy as np arr1 = np.linspace(start = 1,stop = 5,num = 20) print(arr1) # Output: [1. 1.21052632 1.42105263 1.63157895 1.84210526 2.05263158 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737 4.78947368 5. ]

สังเกตว่าตัวเลขในอาร์เรย์เริ่มต้นที่ 1 และสิ้นสุดที่ 5 อย่างไร รวมทั้งจุดสิ้นสุดทั้งสอง นอกจากนี้ ให้สังเกตว่าตัวเลข รวมถึงจุดที่ 1 และ 5 ถูกแสดงเป็น float ในอาร์เรย์ที่ส่งคืนอย่างไร

#2. ในตัวอย่างก่อนหน้านี้ คุณได้ส่งผ่านค่าสำหรับ start , stop และ num เป็น อาร์กิวเมนต์ของคีย์เวิร์ด หากคุณส่งผ่านอาร์กิวเมนต์ในลำดับที่ถูกต้อง คุณอาจใช้เป็น อาร์กิวเมนต์ตำแหน่ง ที่มีเฉพาะค่าดังที่แสดงด้านล่าง

 import numpy as np arr2 = np.linspace(1,5,20) print(arr2) # Output: [1. 1.21052632 1.42105263 1.63157895 1.84210526 2.05263158 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737 4.78947368 5. ]

#3. ทีนี้มาสร้างอาร์เรย์อื่นที่เราตั้งค่า retstep เป็น True

ซึ่งหมายความว่าฟังก์ชันจะส่งคืนทั้งอาร์เรย์และขั้นตอน และเราสามารถแยกออกเป็นสองตัวแปร arr3 : อาร์เรย์ และ step_size : ขนาดขั้นตอนที่ส่งคืน

รหัสเซลล์ต่อไปนี้จะอธิบายวิธีการดำเนินการ

 import numpy as np arr3, step_size = np.linspace(1,5,20,retstep = True) print(arr3) # Output: [1. 1.21052632 1.42105263 1.63157895 1.84210526 2.05263158 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737 4.78947368 5. ] # Output: print(step_size) 0.21052631578947367

#4. เป็นตัวอย่างสุดท้าย ให้เราตั้งค่า endpoint เป็น False และตรวจสอบว่าเกิดอะไรขึ้น

 import numpy as np arr4 = np.linspace(1,5,20,endpoint = False) print(arr4) # Output: [1. 1.2 1.4 1.6 1.8 2. 2.2 2.4 2.6 2.8 3. 3.2 3.4 3.6 3.8 4. 4.2 4.4 4.6 4.8]

ในอาร์เรย์ที่ส่งคืน คุณจะเห็นว่ารวม 1 แต่ไม่รวม 5 และค่าสุดท้ายในอาร์เรย์คือ 4.8 แต่เรายังมีตัวเลข 20 ตัว

จนถึงตอนนี้ เราได้สร้างอาร์เรย์ของตัวเลขที่เว้นระยะเท่ากันเท่านั้น ในส่วนถัดไป เรามาลองนึกภาพโดยพล็อตตัวเลขเหล่านี้กัน

วิธีการพล็อตตัวเลขที่เว้นระยะเท่ากันในช่วงเวลา

ในส่วนนี้ ให้เราเลือก [10,15] เป็นช่วงเวลาที่น่าสนใจ จากนั้น ใช้ np.linspace() เพื่อสร้างอาร์เรย์สองอาร์เรย์ แต่ละชุดมี 8 และ 12 จุดตามลำดับ

หลังจากเสร็จสิ้น เราสามารถใช้ฟังก์ชันการพล็อตจากไลบรารี matplotlib เพื่อลงจุดได้

เพื่อความชัดเจน เราจะยึดสองอาร์เรย์ของ N1 = 8 และ N2 = 12 จุดที่เว้นระยะเท่ากันที่ตำแหน่งต่างๆ ตามแกน y

ข้อมูลโค้ดต่อไปนี้แสดงให้เห็นสิ่งนี้

 import numpy as np import matplotlib.pyplot as plt N1 = 8 N2 = 12 a = 10 b = 15 y1 = np.zeros(N1) y2 = np.zeros(N2) x1 = np.linspace(a, b, N1) x2 = np.linspace(a, b, N2) plt.plot(x1, y1-0.5, 'o') plt.plot(x2, y2 + 0.5, 'o') plt.ylim([-1, 1]) plt.title(f'Evenly Spaced Numbers in the Interval [{a},{b}]') plt.xlabel('Interval') plt.show()
numpy-linspace-plot

การสร้างจุดที่เว้นระยะเท่ากันจะมีประโยชน์เมื่อทำงานกับฟังก์ชันทางคณิตศาสตร์ เราจะเรียนรู้เกี่ยวกับเรื่องนี้ในหัวข้อถัดไป

วิธีใช้ NumPy linspace() กับฟังก์ชันคณิตศาสตร์

หลังจากที่คุณสร้างอาร์เรย์ของตัวเลขที่เว้นระยะเท่ากันโดยใช้ np.linspace() แล้ว คุณสามารถคำนวณค่าของฟังก์ชันทางคณิตศาสตร์ในช่วงเวลานั้นได้

ในเซลล์โค้ดด้านล่าง คุณต้องสร้างจุดเว้นระยะห่างเท่าๆ กัน 50 จุดในช่วง 0 ถึง 2π จากนั้นสร้างอาร์เรย์ y โดยใช้ np.sin() บนอาร์เรย์ x โปรดทราบว่าคุณอาจข้ามพารามิเตอร์ num ได้ เนื่องจากค่าเริ่มต้นคือ 50 เราจะยังคงใช้พารามิเตอร์นี้อย่างชัดเจน

ในขั้นตอนต่อไป คุณสามารถพล็อตฟังก์ชันไซน์ในช่วงเวลา [0, 2π] ในการดำเนินการนี้ คุณสามารถใช้ matplotlib ได้ดังในตัวอย่างก่อนหน้านี้ โดยเฉพาะอย่างยิ่ง ฟังก์ชัน plot() ใน matplotlib.pytplot ถูกใช้เพื่อสร้างพล็อตบรรทัด

 import numpy as np import matplotlib.pyplot as plt N = 50 a = 0.0 b = 2*np.pi x = np.linspace(a, b, N) y = np.sin(x) plt.plot(x, y, marker = "o") plt.ylim([-1, 1]) plt.title(f'y = sin(x)') plt.xlabel('x ---->') plt.show()

ตอนนี้ ให้รันโค้ดด้านบนโดยตั้งค่า N ให้เท่ากับ 10 คุณจะได้พล็อตดังรูปด้านล่าง

และคุณจะเห็นว่าโครงเรื่องไม่ราบรื่นนัก เนื่องจากคุณได้เลือกเพียง 10 คะแนนในช่วงเวลานั้น

โดยทั่วไป ยิ่งคุณพิจารณาจำนวนคะแนนมากเท่าใด โครงเรื่องของฟังก์ชันก็จะยิ่งราบรื่นขึ้นเท่านั้น

บทสรุป

นี่คือบทสรุปของสิ่งที่เราได้เรียนรู้

  • np.linspace(start, stop, num) ส่งคืนอาร์เรย์ของ num ที่เว้นระยะห่างเท่ากันในช่วงเวลา [start, stop]
  • ตั้งค่า ปลายทาง พารามิเตอร์ทางเลือกเป็น False เพื่อแยก การหยุด และตั้งค่าช่วงเวลาเป็น [start, stop)
  • ตั้งค่า retstep เป็น True เพื่อรับขนาดขั้นตอน
  • สร้างอาร์เรย์ที่เว้นระยะห่างเท่าๆ กันโดยใช้ np.linspace() จากนั้นใช้อาร์เรย์ที่มีฟังก์ชันทางคณิตศาสตร์

ฉันหวังว่าคุณจะเข้าใจว่า np.linspace() ทำงานอย่างไร คุณสามารถเลือกเรียกใช้ตัวอย่างด้านบนในสมุดบันทึก Jupyter ดูคำแนะนำของเราเกี่ยวกับโน้ตบุ๊ก Jupyter หรือทางเลือกอื่นๆ ของ Jupyter ที่คุณควรพิจารณา

พบกันเร็ว ๆ นี้ในบทช่วยสอน Python อื่น ถึงเวลานั้น ให้เข้ารหัสต่อไป!