Để chuyển đổi mảng số phức thành mảng số thực khi tất cả các phần ảo đều "gần bằng 0", chúng ta sử dụng numpy.real_if_close() trong Python. Hàm này kiểm tra xem phần ảo của mỗi phần tử có nhỏ hơn ngưỡng cho phép (tol * machine_epsilon) hay không.
Tham số của numpy.real_if_close()
- a: Mảng đầu vào.
- tol: Dung sai tính theo epsilon của máy (machine epsilon). Mặc định là 100. Phần tử có phần ảo tuyệt đối ≤
tol * epssẽ được coi là thực.
Các bước thực hiện
1. Nhập thư viện
import numpy as np
2. Tạo mảng số phức với phần ảo rất nhỏ
arr = np.array([2.1 + 4e-14j, 5.2 + 3e-15j])
3. Hiển thị mảng
print("Mảng của chúng ta...\n", arr)
4. Kiểm tra số chiều
print("\nSố chiều của mảng...\n", arr.ndim)
5. Lấy kiểu dữ liệu
print("\nKiểu dữ liệu của đối tượng mảng...\n", arr.dtype)
6. Lấy hình dạng
print("\nHình dạng của đối tượng mảng...\n", arr.shape)
7. Chuyển đổi với real_if_close (tol=1000)
print("\nKết quả...\n", np.real_if_close(arr, tol=1000))
Ví dụ hoàn chỉnh
import numpy as np
# Tạo mảng số phức với phần ảo rất nhỏ
arr = np.array([2.1 + 4e-14j, 5.2 + 3e-15j])
# Hiển thị mảng
print("Mảng của chúng ta...\n", arr)
# Kiểm tra số chiều
print("\nSố chiều của mảng...\n", arr.ndim)
# Lấy kiểu dữ liệu
print("\nKiểu dữ liệu của đối tượng mảng...\n", arr.dtype)
# Lấy hình dạng
print("\nHình dạng của đối tượng mảng...\n", arr.shape)
# Trả về phần thực nếu phần ảo gần bằng 0
print("\nKết quả...\n", np.real_if_close(arr, tol=1000))
Kết quả đầu ra
Mảng của chúng ta...
[2.1+4.e-14j 5.2+3.e-15j]
Số chiều của mảng...
1
Kiểu dữ liệu của đối tượng mảng...
complex128
Hình dạng của đối tượng mảng...
(2,)
Kết quả...
[2.1 5.2]
Giải thích: Machine epsilon cho float64 xấp xỉ 2.22e-16. Với tol=1000, ngưỡng là 1000 * 2.22e-16 ≈ 2.22e-13. Cả hai phần ảo (4e-14 và 3e-15) đều nhỏ hơn ngưỡng này, nên hàm trả về mảng thực float64.