Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

คืนค่าส่วนจริงหากอินพุทเชิงซ้อนมีส่วนจินตภาพใกล้ศูนย์ใน Python

หากต้องการคืนค่าส่วนจริงเมื่ออินพุทเป็นจำนวนเชิงซ้อนที่มีส่วนจินตภาพ (imaginary parts) ใกล้เคียงศูนย์ ให้ใช้ numpy.real_if_close() ใน Python "ใกล้ศูนย์" (Close to zero) ถูกนิยามว่า tol * (machine epsilon ของชนิดข้อมูลของ a) หาก a เป็นจำนวนจริง ชนิดข้อมูลของ a จะถูกใช้สำหรับผลลัพธ์ หาก a มีองค์ประกอบเชิงซ้อน ชนิดข้อมูลที่คืนจะเป็น float

พารามิเตอร์สำคัญ

  • a: อาร์เรย์อินพุท
  • tol: ความทนทาน (tolerance) ในหน่วย machine epsilons สำหรับส่วนจินตภาพขององค์ประกอบในอาร์เรย์ (ค่าเริ่มต้นคือ 100)

ขั้นตอนการใช้งาน

1. นำเข้าไลบรารีที่จำเป็น

import numpy as np

2. สร้างอาร์เรย์ NumPy ด้วยเมธอด array() (ค่าเชิงซ้อนที่มีส่วนจินตภาพเล็กมาก)

arr = np.array([2.1 + 4e-14j, 5.2 + 3e-15j])

3. แสดงอาร์เรย์

print("Our Array...\n", arr)

4. ตรวจสอบมิติ

print("\nDimensions of our Array...\n", arr.ndim)

5. ตรวจสอบชนิดข้อมูล

print("\nDatatype of our Array object...\n", arr.dtype)

6. ตรวจสอบรูปร่าง

print("\nShape of our Array object...\n", arr.shape)

7. คืนค่าส่วนจริงด้วย np.real_if_close() (tol=1000)

print("\nResult...\n", np.real_if_close(arr, tol=1000))

ตัวอย่างโค้ดเต็ม

import numpy as np

# สร้างอาร์เรย์ที่มีส่วนจินตภาพเล็กมาก
arr = np.array([2.1 + 4e-14j, 5.2 + 3e-15j])

# แสดงอาร์เรย์
print("Our Array...\n", arr)

# ตรวจสอบมิติ
print("\nDimensions of our Array...\n", arr.ndim)

# ตรวจสอบชนิดข้อมูล
print("\nDatatype of our Array object...\n", arr.dtype)

# ตรวจสอบรูปร่าง
print("\nShape of our Array object...\n", arr.shape)

# คืนค่าส่วนจริงหากส่วนจินตภาพใกล้ศูนย์
print("\nResult...\n", np.real_if_close(arr, tol=1000))

ผลลัพธ์ที่ได้

Our Array...
 [2.1+4.e-14j 5.2+3.e-15j]
Dimensions of our Array...
 1
Datatype of our Array object...
 complex128
Shape of our Array object...
 (2,)
Result...
 [2.1 5.2]

คำอธิบายเพิ่มเติม

ฟังก์ชัน np.real_if_close() มีประโยชน์เมื่อ:

  • การคำนวณเชิงตัวเลขให้ผลลัพธ์ที่ควรจะเป็นจำนวนจริง แต่เนื่องจากข้อผิดพลาดการปัดเศษ (rounding errors) ได้ค่าเชิงซ้อนที่มีส่วนจินตภาพเล็กมาก (เช่น 1e-15)
  • ต้องการแปลงกลับเป็นจำนวนจริงโดยอัตโนมัติหากส่วนจินตภาพ "เล็กพอ"

ในตัวอย่าง:

  • 2.1 + 4e-14j → ส่วนจินตภาพ 4e-14 ใกล้ศูนย์ → คืน 2.1
  • 5.2 + 3e-15j → ส่วนจินตภาพ 3e-15 ใกล้ศูนย์ → คืน 5.2

พารามิเตอร์ tol (ค่าเริ่มต้น 100) ควบคุมความเข้มงวด:

  • tol มากขึ้น = ยอมรับส่วนจินตภาพที่ใหญ่ขึ้น
  • tol น้อยขึ้น = เข้มงวดกว่า ต้องการส่วนจินตภาพเล็กมากเท่านั้น

Machine epsilon สำหรับ float64 ประมาณ 2.22e-16 ดังนั้น tol=1000 หมายถึงยอมรับค่าถึง ~2e-13

คืนค่าส่วนจริงหากอินพุทเชิงซ้อนมีส่วนจินตภาพใกล้ศูนย์ใน Python

ใช้ numpy.real_if_close() แปลงจำนวนเชิงซ้อนที่มีส่วนจินตภาพเล็กมาก (4e-14, 3e-15) เป็นจำนวนจริง 2.1 และ 5.2