Trước NumPy 1. 4, là lớp được lựa chọn và nó vẫn có sẵn để duy trì khả năng tương thích ngược. Tuy nhiên, cái mới hoàn thiện hơn và các lớp tiện lợi của nó cung cấp một giao diện nhất quán hơn, hoạt động tốt hơn để làm việc với các biểu thức đa thức. Do đó được khuyến nghị cho mã hóa mới
Ghi chú
Thuật ngữ
Thuật ngữ mô-đun đa thức đề cập đến API cũ được xác định trong
>>> p1d = np.poly1d[[1, 2, 3]] >>> p = np.polynomial.Polynomial[p1d.coef[::-1]]1, bao gồm lớp và các hàm đa thức có tiền tố là poly có thể truy cập từ không gian tên [e. g. , , , vân vân. ]
Thuật ngữ gói đa thức đề cập đến API mới được xác định trong , bao gồm các lớp tiện lợi cho các loại đa thức khác nhau [_______0_______8,
>>> p1d = np.poly1d[[1, 2, 3]] >>> p = np.polynomial.Polynomial[p1d.coef[::-1]]9, v.v. ]
chuyển từ sang
Như đã lưu ý ở trên, các hàm liên quan và được xác định trong
>>> p1d = np.poly1d[[1, 2, 3]] >>> p = np.polynomial.Polynomial[p1d.coef[::-1]]1, chẳng hạn như và , được coi là kế thừa và không được sử dụng trong mã mới. Kể từ phiên bản NumPy 1. 4, gói được ưu tiên để làm việc với đa thức
Tham khảo nhanh
Bảng sau đây nêu bật một số điểm khác biệt chính giữa mô-đun đa thức kế thừa và gói đa thức cho các tác vụ thông thường. Lớp được nhập cho ngắn gọn
from numpy.polynomial import Polynomial
Làm cách nào để…
Di sản []
Tạo một đối tượng đa thức từ các hệ số
In [1]: rng = np.random.default_rng[] In [2]: x = np.arange[10] In [3]: y = np.arange[10] + rng.standard_normal[10]0
In [1]: rng = np.random.default_rng[] In [2]: x = np.arange[10] In [3]: y = np.arange[10] + rng.standard_normal[10]1
Tạo một đối tượng đa thức từ gốc
In [1]: rng = np.random.default_rng[] In [2]: x = np.arange[10] In [3]: y = np.arange[10] + rng.standard_normal[10]2
In [1]: rng = np.random.default_rng[] In [2]: x = np.arange[10] In [3]: y = np.arange[10] + rng.standard_normal[10]3
In [1]: rng = np.random.default_rng[] In [2]: x = np.arange[10] In [3]: y = np.arange[10] + rng.standard_normal[10]4
Khớp một đa thức bậc
In [1]: rng = np.random.default_rng[] In [2]: x = np.arange[10] In [3]: y = np.arange[10] + rng.standard_normal[10]5 với dữ liệu
In [1]: rng = np.random.default_rng[] In [2]: x = np.arange[10] In [3]: y = np.arange[10] + rng.standard_normal[10]6
In [1]: rng = np.random.default_rng[] In [2]: x = np.arange[10] In [3]: y = np.arange[10] + rng.standard_normal[10]7
Lưu ý thứ tự đảo ngược của các hệ số
Hướng dẫn chuyển tiếp
Có sự khác biệt đáng kể giữa
>>> p1d = np.poly1d[[1, 2, 3]] >>> p = np.polynomial.Polynomial[p1d.coef[::-1]]1 và. Sự khác biệt đáng kể nhất là thứ tự của các hệ số cho các biểu thức đa thức. Tất cả các hàm khác nhau đều xử lý chuỗi có hệ số đi từ bậc 0 trở lên, đó là thứ tự đảo ngược của quy ước poly1d. Cách dễ dàng để ghi nhớ điều này là các chỉ số tương ứng với mức độ, tôi. e. ,
In [4]: np.polyfit[x, y, deg=1] Out[4]: array[[0.93492185, 0.27149771]]1 là hệ số của số hạng i
Mặc dù sự khác biệt trong quy ước có thể gây nhầm lẫn, nhưng thật đơn giản để chuyển đổi từ API đa thức cũ sang API mới. Ví dụ: phần sau minh họa cách bạn sẽ chuyển đổi một thể hiện biểu thị biểu thức \[x^{2} + 2x + 3\] thành một thể hiện biểu diễn .
>>> p1d = np.poly1d[[1, 2, 3]] >>> p = np.polynomial.Polynomial[p1d.coef[::-1]]
Ngoài thuộc tính
In [4]: np.polyfit[x, y, deg=1] Out[4]: array[[0.93492185, 0.27149771]]4, các đa thức từ gói đa thức còn có các thuộc tính
In [4]: np.polyfit[x, y, deg=1] Out[4]: array[[0.93492185, 0.27149771]]5 và
In [4]: np.polyfit[x, y, deg=1] Out[4]: array[[0.93492185, 0.27149771]]6. Các thuộc tính này phù hợp nhất khi khớp đa thức với dữ liệu, mặc dù cần lưu ý rằng các đa thức có các thuộc tính
In [4]: np.polyfit[x, y, deg=1] Out[4]: array[[0.93492185, 0.27149771]]5 và
In [4]: np.polyfit[x, y, deg=1] Out[4]: array[[0.93492185, 0.27149771]]6 khác nhau không được coi là bằng nhau và không thể trộn lẫn trong số học
>>> p1 = np.polynomial.Polynomial[[1, 2, 3]] >>> p1 Polynomial[[1., 2., 3.], domain=[-1, 1], window=[-1, 1], symbol='x'] >>> p2 = np.polynomial.Polynomial[[1, 2, 3], domain=[-2, 2]] >>> p1 == p2 False >>> p1 + p2 Traceback [most recent call last]: ... TypeError: Domains differ
Xem tài liệu về các lớp tiện lợi để biết thêm chi tiết về các thuộc tính
In [4]: np.polyfit[x, y, deg=1] Out[4]: array[[0.93492185, 0.27149771]]5 và
In [4]: np.polyfit[x, y, deg=1] Out[4]: array[[0.93492185, 0.27149771]]6
Một điểm khác biệt chính giữa mô-đun đa thức kế thừa và gói đa thức là khớp đa thức. Trong mô-đun cũ, việc lắp được thực hiện thông qua chức năng. Trong gói đa thức, phương thức lớp được ưu tiên. Ví dụ: hãy xem xét sự phù hợp tuyến tính đơn giản với dữ liệu sau
In [1]: rng = np.random.default_rng[] In [2]: x = np.arange[10] In [3]: y = np.arange[10] + rng.standard_normal[10]
Với mô-đun đa thức kế thừa, một khớp tuyến tính [i. e. đa thức bậc 1] có thể được áp dụng cho những dữ liệu này với
In [4]: np.polyfit[x, y, deg=1] Out[4]: array[[0.93492185, 0.27149771]]
Với API đa thức mới, phương thức lớp được ưu tiên
In [5]: p_fitted = np.polynomial.Polynomial.fit[x, y, deg=1] In [6]: p_fitted Out[6]: Polynomial[[4.47864606, 4.20714835], domain=[0., 9.], window=[-1., 1.], symbol='x']
Lưu ý rằng các hệ số được đưa ra trong miền tỷ lệ được xác định bởi ánh xạ tuyến tính giữa
In [4]: np.polyfit[x, y, deg=1] Out[4]: array[[0.93492185, 0.27149771]]6 và
In [4]: np.polyfit[x, y, deg=1] Out[4]: array[[0.93492185, 0.27149771]]5. có thể được sử dụng để lấy các hệ số trong miền dữ liệu chưa định tỷ lệ
In [7]: p_fitted.convert[] Out[7]: Polynomial[[0.27149771, 0.93492185], domain=[-1., 1.], window=[-1., 1.], symbol='x']
Tài liệu cho gói
Ngoài các đa thức chuỗi lũy thừa tiêu chuẩn, gói đa thức cung cấp một số loại đa thức bổ sung bao gồm các đa thức Chebyshev, Hermite [hai kiểu con], Laguerre và Legendre. Mỗi trong số này có một lớp tiện lợi liên quan có sẵn từ không gian tên cung cấp giao diện nhất quán để làm việc với đa thức bất kể loại của chúng
- Sử dụng các lớp học tiện lợi
Tài liệu liên quan đến các chức năng cụ thể được xác định cho từng loại đa thức riêng lẻ có thể được tìm thấy trong tài liệu mô-đun tương ứng