Python tính toán sản phẩm chấm như thế nào?
Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách sử dụng hàm Numpy dot (np. dot), để tính toán các sản phẩm dấu chấm trong Numpy Show
Tôi sẽ giải thích chính xác chức năng của hàm này, cách thức hoạt động của cú pháp và tôi sẽ chỉ cho bạn các ví dụ rõ ràng về cách sử dụng np. dấu chấm Mục lục Nếu bạn cần một cái gì đó cụ thể, bạn có thể nhấp vào bất kỳ liên kết nào ở trên và nó sẽ đưa bạn đến phần hướng dẫn thích hợp Phải nói rằng, nếu bạn là người mới sử dụng Numpy hoặc cần xem lại nhanh về các tích chấm toán học, có lẽ bạn nên đọc toàn bộ hướng dẫn Giới thiệu nhanh về Numpy DotTrước hết, hãy bắt đầu với những điều cơ bản Numpy dot làm gì? Ở cấp độ cao, Numpy dot tính toán tích vô hướng của hai mảng Numpy Tuy nhiên, nếu bạn chưa quen với Numpy hoặc nếu bạn không hoàn toàn hiểu các sản phẩm chấm, điều đó có thể không hoàn toàn hợp lý Vì vậy, hãy nhanh chóng xem xét một số điều cơ bản về Numpy và về các sản phẩm chấm Numpy dot hoạt động trên mảng NumpyHãy bắt đầu với Numpy Như bạn có thể biết, Numpy là một gói tiện ích bổ sung dành cho ngôn ngữ lập trình Python Chúng tôi chủ yếu sử dụng Numpy để thao tác dữ liệu và tính toán khoa học, nhưng chúng tôi sử dụng Numpy trên các loại dữ liệu cụ thể trong các cấu trúc dữ liệu cụ thể Numpy là Gói để làm việc với Dữ liệu số trong PythonĐặc biệt, Numpy tạo và hoạt động trên mảng Numpy Mảng Numpy là cấu trúc dữ liệu lưu trữ dữ liệu số theo cấu trúc hàng và cột Vì vậy, ví dụ, một mảng Numpy 2 chiều trông giống như thế này Mảng Numpy có thể có nhiều hình dạng và kích cỡ khác nhau. Ví dụ: ta có thể xây dựng mảng 1 chiều, mảng 2 chiều, mảng n chiều Ngoài ra, chúng ta có thể tạo các mảng Numpy trong đó các Số có nhiều thuộc tính khác nhau. Ví dụ: chúng ta có thể tạo các mảng chứa các số có phân phối chuẩn, các số được rút ra từ một phân phối đồng đều, các số có cùng giá trị, chỉ để đặt tên cho một số Vì vậy, Numpy có nhiều chức năng để tạo mảng Numpy với các loại thuộc tính khác nhau Numpy có các hàm để thực hiện tính toán với mảng NumpyNgoài chức năng tạo mảng Numpy, gói Numpy còn có chức năng thao tác và tính toán với mảng Numpy Vì vậy, Numpy có nhiều hàm để thực hiện các phép tính toán học, như tính tổng của một mảng, tính các hàm mũ của các giá trị mảng, v.v. Ngoài ra, Numpy có các hàm để thực hiện các phép toán nâng cao hơn, như các phép toán từ đại số tuyến tính np. dấu chấm tính toán các sản phẩm dấu chấm trong NumpyVậy chức năng Numpy dot làm gì? Giải thích đơn giản là np.dot(2,3)2 tính các tích Để diễn giải mục nhập trên Wikipedia, tích vô hướng là một phép toán lấy hai chuỗi số có độ dài bằng nhau và trả về một số duy nhất Phải nói rằng, chức năng Numpy dot hoạt động hơi khác một chút tùy thuộc vào đầu vào chính xác Có ba trường hợp rộng mà chúng ta sẽ xem xét với np.dot(2,3)2
Hãy cùng xem cách Numpy dot hoạt động cho những trường hợp khác nhau này Nếu các mảng đầu vào đều là mảng 1 chiều, np. dot tính tích véc tơ dotGiả sử chúng ta có hai mảng Numpy, và và mỗi mảng có 3 giá trị. Cho hai mảng 1 chiều, np.dot(2,3)2 sẽ tính tích vô hướng Sản phẩm chấm có thể được tính như sau Chú ý những gì đang xảy ra ở đây. Các mảng này có cùng độ dài và mỗi mảng có 3 giá trị Khi tính tích vô hướng, chúng tôi nhân giá trị đầu tiên của với giá trị đầu tiên của . Chúng ta nhân giá trị thứ hai của với giá trị thứ hai của . Và chúng tôi nhân giá trị thứ ba của với giá trị thứ ba của . Sau đó, chúng tôi lấy các giá trị kết quả và tổng hợp chúng. Đầu ra là một giá trị vô hướng duy nhất … trong ví dụ này, . Về mặt toán học, chúng ta có thể khái quát hóa ví dụ trên. Nếu chúng ta có hai vectơ và và mỗi vectơ có phần tử, thì tích vô hướng is given by the equation: (1) Về cơ bản, khi lấy tích vô hướng của hai mảng Numpy, chúng ta đang tính tổng các tích theo cặp của hai mảng Nếu một trong các đầu vào là vô hướng, np. dấu chấm thực hiện phép nhân vô hướngTrường hợp thứ hai là khi một đầu vào là một giá trị vô hướng và một đầu vào là một mảng Numpy, mà ở đây chúng ta sẽ gọi là . Nếu chúng ta sử dụng dấu chấm Numpy trên các đầu vào này với mã np.dot(2,3)5 thì Numpy sẽ thực hiện phép nhân vô hướng trên mảng Vì vậy, khi chúng ta sử dụng dấu chấm Numpy với một vô hướng và một mảng Numpy, nó sẽ nhân mọi giá trị của mảng với vô hướng và xuất ra một mảng Numpy mới Nếu cả hai đầu vào là mảng 2D, np. dấu chấm thực hiện phép nhân ma trậnTrường hợp cuối cùng mà chúng ta sẽ đề cập là khi cả hai mảng đầu vào đều là mảng 2 chiều Trong trường hợp này với 2 mảng 2D thì hàm np.dot(2,3)2 sẽ thực hiện phép nhân ma trận Giải thích đầy đủ về phép nhân ma trận nằm ngoài phạm vi của hướng dẫn này, nhưng hãy xem một ví dụ nhanh Giả sử bạn có hai mảng 2D, và . Tiếp theo, hãy nhân các mảng đó với nhau bằng phép nhân ma trận Trong khi nhân ma trận, chúng ta nhân giá trị của các hàng của với giá trị của các cột của và tính tổng chúng theo cách sau. Và đây là kết quả tính toán cuối cùng Lưu ý rằng mảng đầu ra, , có cùng số hàng với và cùng số cột với . Ngoài ra, mỗi giá trị trong mảng đầu ra được tính bằng tổng tích của hàng thứ i của và hàng thứ j của . Tổng quát hơn, để tính toán mảng đầu ra , mỗi giá trị của mảng đầu ra được định nghĩa là. (2) Nếu bạn không quen thuộc với đại số tuyến tính nói chung và đại số ma trận nói riêng, tôi nhận thấy rằng các phương trình này có thể hơi khó hiểu. thậm chí có thể hơi đáng sợ Điều đó nói rằng, nếu bạn muốn tìm hiểu thêm về các phép toán này, tôi khuyên bạn nên đọc cuốn sách Đại số tuyến tính và các ứng dụng của nó, của David Lay và các đồng nghiệp. Đây là một cuốn sách rất dễ tiếp cận về đại số tuyến tính sẽ giúp bạn hiểu một số phép toán mà chúng ta đang thực hiện với Numpy dot Vâng. Vì vậy, bây giờ chúng ta đã xem xét Numpy dot làm gì, hãy xem xét kỹ hơn cú pháp Cú pháp của Numpy DotSau đây, tôi sẽ giải thích cú pháp của hàm Numpy dot Một lưu ý nhanhMột điều trước khi chúng ta xem xét cú pháp Để sử dụng các hàm Numpy, trước tiên bạn cần nhập Numpy. Bạn có thể làm điều đó với đoạn mã sau import numpy as np Điều này rất quan trọng, vì cách bạn nhập Numpy sẽ ảnh hưởng đến cú pháp Quy ước chung giữa các nhà khoa học dữ liệu Python là nhập Numpy với bí danh ' np.dot(2,3)7' và chúng tôi sẽ gắn bó với quy ước đó tại đây np. cú pháp dấu chấmCú pháp của np.dot(2,3)2 thực sự rất đơn giản Giả sử rằng bạn đã nhập Numpy với bí danh np.dot(2,3)7, bạn gọi hàm là 60 Sau đó, bên trong dấu ngoặc đơn, có một vài tham số cho phép bạn cung cấp đầu vào cho hàm Hãy xem những đầu vào đó Các thông số của np. dấu chấmCó 2 tham số cốt lõi cho hàm 60
Hãy nhanh chóng xem qua từng cái một 62 (bắt buộc) Tham số 62 cho phép bạn chỉ định giá trị hoặc mảng đầu vào đầu tiên cho hàm Về mặt kỹ thuật, đối số cho tham số này có thể là một giá trị vô hướng hoặc bất kỳ đối tượng "giống như mảng" nào Bởi vì nó cho phép các đối tượng giống như mảng, đây có thể là một mảng Numpy thích hợp hoặc nó có thể là một danh sách Python, một bộ, v.v. Một giá trị vô hướng như 66 hoặc 67 cũng sẽ hoạt động Hãy nhớ rằng bạn phải cung cấp một đối số cho tham số này 63 (bắt buộc) Tham số 63 cho phép bạn chỉ định giá trị đầu vào thứ hai hoặc mảng cho hàm Tương tự như tham số 62, đối số của 63 có thể là một giá trị vô hướng hoặc bất kỳ đối tượng "giống như mảng" nào. Vì vậy, các đối số có thể chấp nhận được đối với tham số này bao gồm mảng Numpy, danh sách Python và bộ dữ liệu. Các giá trị vô hướng như 66 hoặc 67 cũng được chấp nhận Hãy nhớ rằng bạn phải cung cấp một đối số cho tham số này np.dot(2,3)34 (tùy chọn) Lưu ý rằng 60 cũng có tham số np.dot(2,3)34. Điều này hơi hiếm khi được sử dụng, vì vậy chúng tôi sẽ không đề cập đến nó ở đây. Để biết thêm thông tin về tham số này, hãy xem lại tài liệu chính thức Đầu ra của np. dấu chấmĐầu ra của 60 phụ thuộc vào đầu vào Có một vài trường hợp
Như bạn có thể thấy, đầu ra thực sự phụ thuộc vào cách bạn sử dụng chức năng Với ý nghĩ đó, chúng ta hãy xem một số ví dụ để bạn có thể thấy nó hoạt động như thế nào và xem các loại đầu ra khác nhau mà 60 tạo ra với một số loại đầu vào nhất định ví dụ. Cách tính các sản phẩm chấm trong NumpyVâng. Hãy làm việc thông qua một số ví dụ từng bước Nếu bạn cần một cái gì đó cụ thể, bạn có thể nhấp vào bất kỳ liên kết nào sau đây và nó sẽ đưa bạn đến ví dụ phù hợp ví dụ Chạy mã này trướcTrước khi bạn chạy bất kỳ ví dụ nào, trước tiên bạn cần nhập Numpy Bạn có thể làm điều đó với đoạn mã sau import numpy as np Khi bạn đã làm điều đó, bạn nên sẵn sàng để đi VÍ DỤ 1. Nhân hai sốVâng. Hãy bắt đầu với một ví dụ đơn giản Ở đây, chúng ta sẽ sử dụng hai số (i. e. , giá trị vô hướng) làm đầu vào cho 60 np.dot(2,3) NGOÀI 6Giải thích Điều này có thể hơi bất ngờ, nhưng rất đơn giản Ở đây, chúng tôi đã gọi 60 với hai giá trị vô hướng là 2 và 3 Khi chúng ta gọi 60 với hai số vô hướng, nó chỉ cần nhân chúng với nhau Rõ ràng là np.dot(2,3)86 VÍ DỤ 2. Nhân một số và một mảngTiếp theo, hãy cung cấp một mảng và vô hướng làm đầu vào Ở đây, chúng tôi thực sự sẽ cung cấp một vô hướng (một số nguyên) và một danh sách Python. Thay vì một danh sách Python, chúng tôi cũng có thể cung cấp một mảng Numpy, nhưng tôi đã sử dụng một danh sách Python thay vì nó làm cho thao tác dễ hiểu hơn một chút ở đây Hãy cùng xem np.dot(2,3)3 NGOÀI np.dot(2,3)8Giải thích Một lần nữa, điều này rất đơn giản Đối số đầu tiên của hàm là giá trị vô hướng 2 Đối số thứ hai của hàm là danh sách Python np.dot(2,3)87 Khi chúng tôi cung cấp một vô hướng làm một đầu vào và một danh sách (hoặc mảng Numpy) làm đầu vào khác, 60 chỉ cần nhân các giá trị của mảng với vô hướng Về mặt toán học, chúng tôi coi đây là phép nhân vô hướng của một vectơ hoặc ma trận VÍ DỤ 3. Tính toán sản phẩm chấm của hai mảng 1DTiếp theo, hãy nhập hai danh sách 1 chiều Ở đây, chúng tôi sẽ sử dụng hai danh sách Python, nhưng chúng tôi cũng có thể sử dụng mảng 1D Numpy. Tôi đang sử dụng danh sách Python vì nó giúp thao tác dễ hiểu hơn một chút trong nháy mắt Hãy cùng xem np.dot(2,3)3 NGOÀI np.dot(2,3)4Giải thích Những gì đang xảy ra ở đây? Ở đây, 60 đang tính toán tích vô hướng của hai đầu vào Các đầu vào này là danh sách Python 1 chiều. Và như tôi đã nói trước đó, chúng ta cũng có thể sử dụng mảng 1D Numpy Về mặt toán học, danh sách 1D và mảng Numpy 1D giống như vectơ Khi chúng ta làm việc với các vectơ và lấy tích vô hướng, tích vô hướng được tính bằng cái mà chúng ta đã thấy trước đó
Vì vậy, khi Numpy dot có hai danh sách hoặc mảng 1D làm đầu vào… … nó lấy tích của các phần tử theo cặp, rồi cộng chúng lại với nhau Và đầu ra là một giá trị vô hướng. Trong trường hợp này, kết quả là 98 VÍ DỤ 4. Thực hiện phép nhân ma trận trên hai mảng 2DCuối cùng, hãy xem điều gì sẽ xảy ra khi chúng ta sử dụng Numpy dot trên hai mảng 2 chiều Tạo mảngĐầu tiên, hãy tạo hai mảng Numpy 2 chiều Để làm điều này, chúng tôi sẽ sử dụng hàm np.dot(2,3)30 để tạo một chuỗi số, sau đó sử dụng phương pháp định hình lại Numpy để định hình lại các số thành hình dạng 2D np.dot(2,3)7 Và hãy in chúng ra, để bạn có thể xem nội dung np.dot(2,3)8 NGOÀI import numpy as np0 import numpy as np1 NGOÀI import numpy as np2 Lưu ý rằng cả hai mảng Numpy này đều là 2 chiều. Phải nói rằng, số lượng hàng trong np.dot(2,3)31 giống như số lượng cột trong np.dot(2,3)32sử dụng np. dấu chấm Vâng. Bây giờ hãy sử dụng hàm Numpy dot trên hai mảng này import numpy as np3 NGOÀI import numpy as np4Giải thích Vậy chuyện gì đã xảy ra ở đây? Trong trường hợp này, chúng tôi đã sử dụng hai mảng Numpy 2 chiều làm đầu vào Khi chúng tôi sử dụng mảng 2D làm đầu vào, 60 sẽ tính tích ma trận của các mảng Khi thực hiện điều này, nó sẽ tính toán các giá trị của mảng đầu ra theo phương trình 2 mà chúng ta
Vì vậy, về cơ bản, đây là những gì Numpy đang làm khi chúng tôi chạy mã np.dot(2,3)35 Quan sát cẩn thận. Trong hình trên, bạn có thể thấy rằng phép tính nhân các giá trị của các hàng của A với các giá trị của các cột của B, tính tổng chúng và đặt chúng vào mảng đầu ra cuối cùng, với các giá trị sau Hoạt động này được gọi là sản phẩm ma trận Vì vậy, một lần nữa. khi chúng ta sử dụng Numpy dot trên hai mảng 2 chiều, 60 sẽ tính tích ma trận Tôi hiểu rằng điều này có thể hơi khó hiểu nếu bạn không có nhiều kinh nghiệm về đại số tuyến tính. Nếu đúng như vậy, tôi khuyên bạn nên đọc một số bài về đại số tuyến tính nói chung và phép nhân ma trận nói riêng Câu hỏi thường gặp về Numpy DotBây giờ chúng ta đã xem xét một số ví dụ, hãy xem xét một số câu hỏi phổ biến về hàm 60 Các câu hỏi thường gặp Câu hỏi 1. Đâu là sự khác biệt giữa 6 0 và np.dot(2,3) 39 ?Numpy dot và Numpy matmul tương tự nhau, nhưng chúng hoạt động khác nhau đối với một số loại đầu vào Hai sự khác biệt lớn là dành cho
Hãy xem xét từng cái một Nhân với vô hướngSự khác biệt đầu tiên giữa 60 và np.dot(2,3)39 là 60 cho phép bạn nhân với các giá trị vô hướng, nhưng np.dot(2,3)39 thì không Như chúng ta đã thấy trong , khi chúng ta sử dụng 60 với một số vô hướng (e. g. , một số nguyên) và một mảng/danh sách, Numpy dot sẽ chỉ nhân mọi giá trị của mảng với giá trị vô hướng np.dot(2,3)3 NGOÀI np.dot(2,3)8 Tuy nhiên, nếu bạn cố gắng làm điều này với np.dot(2,3)39, bạn sẽ gặp lỗi import numpy as np7 NGOÀI import numpy as np8Phép nhân mảng nhiều chiều Lĩnh vực thứ hai mà 60 và np.dot(2,3)39 khác nhau là khi chúng hoạt động trên mảng chiều cao Theo tài liệu… Khi bạn sử dụng np.dot(2,3)2
Nhưng khi bạn sử dụng np.dot(2,3)73
Cuối cùng, 60 và np.dot(2,3)39 hoạt động khác nhau đối với phép nhân vô hướng và đối với phép nhân của các đầu vào có chiều cao hơn Câu hỏi 2. Đâu là sự khác biệt giữa 6 0 và np.dot(2,3) 41 ?60 và np.dot(2,3)41 rất giống nhau và thực hiện hiệu quả các hoạt động giống nhau Sự khác biệt là 60 là một hàm Python và np.dot(2,3)41 là một phương thức mảng Numpy Vì vậy, họ thực sự làm điều tương tự, nhưng bạn gọi họ theo một cách hơi khác Giả sử chúng ta có hai mảng 2 chiều np.dot(2,3)7 Chúng ta có thể gọi hàm 60 như sau import numpy as np3 Nhưng chúng tôi sử dụng cái gọi là "cú pháp dấu chấm" để gọi phương thức np.dot(2,3)83 np.dot(2,3)1 Đầu ra giống nhau, nhưng cú pháp hơi khác một chút Nếu bạn vẫn còn bối rối về điều này, hãy nhớ đọc thêm về sự khác biệt giữa hàm Python và phương thức Python Để lại câu hỏi khác của bạn trong các ý kiến dưới đâyBạn vẫn còn thắc mắc về chức năng Numpy dot? Nếu vậy, hãy để lại câu hỏi của bạn trong phần bình luận bên dưới Tham gia khóa học của chúng tôi để tìm hiểu thêm về NumpyTrong hướng dẫn này, tôi đã giải thích cách sử dụng hàm 60 để tính tích vô hướng của mảng 1D và thực hiện phép nhân ma trận của mảng 2D Điều này sẽ giúp bạn hiểu về np.dot(2,3)2, nhưng nếu bạn thực sự muốn học Numpy, thì còn rất nhiều điều cần học Nếu bạn nghiêm túc về việc thành thạo Numpy và nghiêm túc về khoa học dữ liệu trong Python, bạn nên cân nhắc tham gia khóa học cao cấp của chúng tôi có tên là Numpy Mastery Numpy Mastery sẽ dạy cho bạn mọi thứ bạn cần biết về Numpy, bao gồm
Hơn nữa, khóa học này sẽ cho bạn thấy một hệ thống thực hành giúp bạn thành thạo cú pháp trong vòng vài tuần. Chúng tôi sẽ chỉ cho bạn một hệ thống thực hành cho phép bạn ghi nhớ tất cả cú pháp Numpy mà bạn đã học. Nếu bạn gặp khó khăn trong việc ghi nhớ cú pháp Numpy, đây là khóa học bạn đang tìm kiếm Sản phẩm chấm được tính như thế nào?Tích vô hướng của vectơ
. a. và. b. được đưa ra dưới dạng . a. b. cos θ , trong đó θ biểu thị góc giữa các vectơ a và b theo hướng của các vectơ.
Làm thế nào để numpy tính toán sản phẩm chấm?Để tính tích vô hướng của các mảng có nhiều mảng, bạn có thể sử dụng numpy. hàm dấu chấm() . cục mịch. các hàm dot() chấp nhận hai mảng numpy làm đối số, tính toán tích vô hướng của chúng và trả về kết quả.
Tại sao sản phẩm numpy dot lại nhanh như vậy?Bởi vì np. dot thực thi các phép toán số học thực tế và vòng lặp kèm theo trong mã được biên dịch , nhanh hơn nhiều so với trình thông dịch Python.
Sự khác biệt giữa sản phẩm chấm và phép nhân ma trận trong Python là gì?Tóm lại, tích vô hướng là tổng tích của các giá trị trong hai vectơ có cùng kích thước và phép nhân ma trận là phiên bản ma trận của tích vô hướng với hai ma trận. |