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
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 Dot
Trướ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 Numpy
Hã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 Numpy
Ngoà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 Numpy
Vậ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
- cả hai đầu vào là mảng 1D
- cả hai đều là mảng 2D
- một đầu vào là vô hướng và một đầu vào là một mảng
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ơ dot
Giả 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ướng
Trườ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ận
Trườ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 Dot
Sau đây, tôi sẽ giải thích cú pháp của hàm Numpy dot
Một lưu ý nhanh
Mộ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ấm
Cú 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ấm
Có 2 tham số cốt lõi cho hàm
60
6
26
3
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
- Nếu cả hai đầu vào đều là số vô hướng, thì
6
0 sẽ nhân các số vô hướng với nhau và xuất ra một số vô hướng - Nếu một đầu vào là vô hướng và một là mảng, thì
6
0 sẽ nhân mọi giá trị của mảng với vô hướng [i. e. , nhân bản vô tính] - Nếu cả hai đầu vào đều là mảng 1 chiều,
6
0 sẽ tính tích vô hướng của các đầu vào - Nếu cả 2 đầu vào đều là mảng 2 chiều thì
6
0 sẽ thực hiện phép nhân ma trận
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 Numpy
Vâ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ước
Trướ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ảng
Tiế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 1D
Tiế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 2D
Cuố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 Dot
Bâ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
- nhân với vô hướng
- phép nhân mảng Numpy chiều cao
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
Nếu a là mảng N-D và b là mảng 1-D, thì đó là tích tổng trên trục cuối cùng của a và b
Nếu a là một mảng N-D và b là một mảng M-D [trong đó M>=2], nó là một tích tổng trên trục cuối cùng của a và trục thứ hai đến trục cuối cùng của b
Nhưng khi bạn sử dụng
np.dot[2,3]73
Nếu một trong hai đối số là N-D, N > 2, thì nó được coi là một chồng ma trận nằm trong hai chỉ mục cuối cùng và phát sóng tương ứng
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ề Numpy
Trong 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
- Cách tạo mảng Numpy
- Chức năng “Numpy random seed” làm gì
- Cách định hình lại, tách và kết hợp các mảng Numpy của bạn
- Cách sử dụng các hàm ngẫu nhiên Numpy
- Cách thực hiện các phép toán trên mảng Numpy
- và hơn thế nữa …
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