Hướng dẫn how do you do a matrix matrix multiplication in python? - làm thế nào để bạn thực hiện phép nhân ma trận trong python?
Trong Python, chúng ta có thể triển khai một ma trận dưới dạng danh sách lồng nhau (danh sách bên trong danh sách). Chúng ta có thể coi từng phần tử như một hàng của ma trận. Ví dụ [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23]0 sẽ đại diện cho một ma trận [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23]1. Hàng đầu tiên có thể được chọn là [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23]2. Và, phần tử trong hàng đầu tiên, cột đầu tiên có thể được chọn là [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23]3. Sự nhân của hai ma trận x và y chỉ được xác định nếu số lượng cột trong x bằng số lượng hàng y. Nếu x là ma trận [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23]4 và y là ma trận [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23]5 thì XY được xác định và có kích thước [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23]6 (nhưng yx không được xác định). Dưới đây là một vài cách để thực hiện phép nhân ma trận trong Python. Mã nguồn: phép nhân ma trận bằng cách sử dụng vòng lặp lồng nhau
Đầu ra [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] Trong chương trình này, chúng tôi đã sử dụng các vòng lặp [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23]7 lồng nhau để lặp qua mỗi hàng và mỗi cột. Chúng tôi tích lũy tổng sản phẩm trong kết quả. Kỹ thuật này đơn giản nhưng tốn kém về mặt tính toán khi chúng tôi tăng thứ tự của ma trận. Đối với các hoạt động ma trận lớn hơn, chúng tôi khuyên bạn nên sử dụng các gói phần mềm được tối ưu hóa như Numpy, theo thứ tự (theo thứ tự 1000) lần so với mã trên. Mã nguồn: phép nhân ma trận bằng cách sử dụng danh sách lồng nhau
Đầu ra của chương trình này giống như trên. Để hiểu mã trên trước tiên, trước tiên chúng ta phải biết về chức năng tích hợp [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23]8 và giải nén danh sách đối số bằng cách sử dụng toán tử *. Chúng tôi đã sử dụng sự hiểu biết danh sách lồng nhau để lặp qua từng phần tử trong ma trận. Mã trông phức tạp và không thể đọc được lúc đầu. Nhưng một khi bạn hiểu được sự hiểu biết danh sách, có lẽ bạn sẽ không quay lại các vòng lặp lồng nhau. Sản phẩm ma trận của hai mảng. Tham sốx1, x2array_likex1, x2array_likeMảng đầu vào, vô hướng không được phép. Outndarray, tùy chọnndarray, optionalMột vị trí mà kết quả được lưu trữ. Nếu được cung cấp, nó phải có một hình dạng phù hợp với chữ ký (n, k), (k, m)-> (n, m). Nếu không được cung cấp hoặc không có, một mảng mới được phân bổ được trả lại. **kwargsĐối với các đối số chỉ từ khóa khác, hãy xem các tài liệu UFUNC.ufunc docs. Mới trong phiên bản 1.16: Bây giờ xử lý UFUNC KWARGSNow handles ufunc kwargs ReturnsyndarrayyndarraySản phẩm ma trận của các đầu vào. Đây chỉ là vô hướng khi cả x1, x2 là vectơ 1 chiều. RAISEVALUEERRORNếu kích thước cuối cùng của X1 không có cùng kích thước với kích thước thứ hai đến cuối cùng của X2. Nếu một giá trị vô hướng được truyền vào. Xem thêm [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23]9 Sản phẩm DOT liên hợp phức tạp. 0Tổng sản phẩm trên các trục tùy ý. 1Công ước tổng kết Einstein. 2Sản phẩm ma trận thay thế với các quy tắc phát sóng khác nhau. Ghi chú Hành vi phụ thuộc vào các đối số theo cách sau.
3 khác với 2 theo hai cách quan trọng:
Hàm Matmul thực hiện ngữ nghĩa của toán tử 7 được giới thiệu trong Python 3.5 sau PEP 465.PEP 465.Ví dụ Đối với các mảng 2 chiều, đó là sản phẩm ma trận: >>> a = np.array([[1, 0], ... [0, 1]]) >>> b = np.array([[4, 1], ... [2, 2]]) >>> np.matmul(a, b) array([[4, 1], [2, 2]]) Đối với 2 chiều trộn với 1-D, kết quả là thông thường. >>> a = np.array([[1, 0], ... [0, 1]]) >>> b = np.array([1, 2]) >>> np.matmul(a, b) array([1, 2]) >>> np.matmul(b, a) array([1, 2]) Phát sóng là thông thường cho các ngăn xếp của mảng >>> a = np.arange(2 * 2 * 4).reshape((2, 2, 4)) >>> b = np.arange(2 * 2 * 4).reshape((2, 4, 2)) >>> np.matmul(a,b).shape (2, 2, 2) >>> np.matmul(a, b)[0, 1, 1] 98 >>> sum(a[0, 1, :] * b[0 , :, 1]) 98 Vector, Vector trả về sản phẩm bên trong vô hướng, nhưng không đối số nào được kết hợp phức tạp: >>> np.matmul([2j, 3j], [2j, 3j]) (-13+0j) Nhân vô hướng làm tăng lỗi. >>> np.matmul([1,2], 3) Traceback (most recent call last): ... ValueError: matmul: Input operand 1 does not have enough dimensions ... Toán tử 7 có thể được sử dụng làm tốc ký cho 9 trên ndarrays.>>> x1 = np.array([2j, 3j]) >>> x2 = np.array([2j, 3j]) >>> x1 @ x2 (-13+0j) Mới trong phiên bản 1.10.0. |