Phép nhân vô hướng của vectơ Python

Numpy là gói python tốt nhất để tạo mảng NumPy. Nó cho phép bạn thực hiện các phép tính toán học phức tạp một cách hiệu quả. Trong toàn bộ hướng dẫn này, bạn sẽ học cách nhân mảng NumPy với một vô hướng trong python bằng nhiều phương pháp khác nhau

Các phương pháp để nhân mảng Numpy với một vô hướng

Trong phần này, bạn sẽ biết tất cả các phương pháp để tạo và nhân mảng NumPy với một Scalar. Tất cả phần trình diễn mã hóa được thực hiện trên sổ ghi chép Jupyter. Vì vậy, tôi sẽ khuyên bạn làm như vậy để hiểu rõ hơn

Phương pháp 1. Nhân mảng NumPy với một đại lượng vô hướng bằng toán tử *

Phương pháp đầu tiên để nhân mảng NumPy là sử dụng toán tử ' * '. Nó sẽ nhân trực tiếp tất cả các phần tử của mảng NumPy cho dù đó là mảng Một chiều hay Đa chiều

Mảng một chiều

Hãy tạo một mảng 1D và nhân nó với một giá trị vô hướng. Bạn có thể tạo một mảng NumPy bằng np. phương thức mảng(). Sau đó, bạn sẽ nhân mảng với giá trị vô hướng

Sản phẩm chấm là một khái niệm chính của đại số tuyến tính và do đó, máy học và khoa học dữ liệu. Chúng ta sẽ thấy một số tính chất của hoạt động này. Sau đó, chúng ta sẽ có một số trực giác về mối liên hệ giữa ma trận và hệ phương trình tuyến tính

Đừng bỏ lỡ bài viết mới

2. 2 Nhân ma trận và vectơ

Cách tiêu chuẩn để nhân ma trận không phải là nhân từng phần tử của ma trận này với từng phần tử của ma trận kia (được gọi là tích từng phần tử) mà là tính tổng các tích giữa các hàng và cột. Tích ma trận hay còn gọi là tích vô hướng được tính như sau

Phép nhân vô hướng của vectơ Python
Tích vô hướng giữa ma trận và vectơ

Số cột của ma trận thứ nhất phải bằng số hàng của ma trận thứ hai. Nếu kích thước của ma trận thứ nhất là ($m \times n$) thì ma trận thứ hai cần có dạng ($n \times x$). Ma trận thu được sẽ có dạng ($m \times x$)

ví dụ 1

Hãy bắt đầu với phép nhân của một ma trận và một vectơ

$ \bs{A} \times \bs{b} = \bs{C} $

với

$ \bs{A}= \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix} $

$ \bs{b}=\begin{bmatrix} 2\\ 4 \end{bmatrix} $

Chúng tôi thấy rằng công thức là như sau

$ \begin{aligned} &\begin{bmatrix} A_{1,1} & A_{1,2} \\ A_{2,1} & A_{2,2} \\ A_{3,1} & A_

Vì vậy, chúng tôi sẽ có

$ \begin{aligned} &\begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix}\times \begin{bmatrix} 2 \\ 4 \end{bmatrix}=\\ &

Đó là một thói quen tốt để kiểm tra kích thước của ma trận để xem những gì đang xảy ra. Chúng ta có thể thấy trong ví dụ này rằng hình dạng của $\bs{A}$ là ($3 \times 2$) và hình dạng của $\bs{b}$ là ($2 \times 1$). Vậy kích thước của $\bs{C}$ là ($3 \times 1$)

Với Numpy

Hàm Numpy

array([[10],
       [22],
       [34]])
6 có thể được sử dụng để tính tích ma trận (hoặc tích vô hướng). Hãy thử tái tạo ví dụ cuối cùng

A = np.array([[1, 2], [3, 4], [5, 6]])
A

array([[1, 2],
       [3, 4],
       [5, 6]])

B = np.array([[2], [4]])
B

array([[2],
       [4]])

C = np.dot(A, B)
C

array([[10],
       [22],
       [34]])

Nó tương đương với việc sử dụng phương thức

array([[10],
       [22],
       [34]])
6 của mảng Numpy

________số 8

array([[10],
       [22],
       [34]])

ví dụ 2

Nhân hai ma trận

$\bs{A} \bs{B} = \bs{C}$

với

$\bs{A}=\begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ 10 & 11 & 12 \end{bmatrix} $

$\bs{B}=\begin{bmatrix} 2 & 7 \\ 1 & 2 \\ 3 & 6 \end{bmatrix} $

Vì vậy chúng tôi có

$ \begin{aligned} &\begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ 10 & 11 & 12 \end{bmatrix} \begin{bmatrix} 2 &

Hãy kiểm tra kết quả với Numpy

A = np.array([[1, 2], [3, 4], [5, 6]])
A
0

A = np.array([[1, 2], [3, 4], [5, 6]])
A
1

array([[1, 2],
       [3, 4],
       [5, 6]])
0

array([[1, 2],
       [3, 4],
       [5, 6]])
1

________số 8

array([[1, 2],
       [3, 4],
       [5, 6]])
3

nó hoạt động

Chính thức hóa của sản phẩm chấm

Sản phẩm chấm có thể được chính thức hóa thông qua phương trình sau

$ C_{i,j} = A_{i,k}B_{k,j} = \sum_{k}A_{i,k}B_{k,j} $

Bạn có thể tìm thêm ví dụ về sản phẩm chấm tại đây

Thuộc tính của sản phẩm chấm

Bây giờ chúng ta sẽ thấy một số tính chất thú vị của tích vô hướng. Sử dụng các ví dụ đơn giản cho từng thuộc tính, chúng ta sẽ làm quen với các hàm Numpy

Đơn giản hóa tích ma trận

$(\bs{AB})^{\text{T}} = \bs{B}^\text{T}\bs{A}^\text{T}$

array([[1, 2],
       [3, 4],
       [5, 6]])
4

array([[1, 2],
       [3, 4],
       [5, 6]])
5

array([[1, 2],
       [3, 4],
       [5, 6]])
6

array([[1, 2],
       [3, 4],
       [5, 6]])
7

$(\bs{AB})^{\text{T}}$

array([[1, 2],
       [3, 4],
       [5, 6]])
8

array([[1, 2],
       [3, 4],
       [5, 6]])
9

tương đương với $\bs{B}^\text{T}\bs{A}^\text{T}$

B = np.array([[2], [4]])
B
0

array([[1, 2],
       [3, 4],
       [5, 6]])
9

Phép nhân ma trận có tính chất phân phối

$\bs{A}(\bs{B}+\bs{C}) = \bs{AB}+\bs{AC}$

ví dụ 3

$ \bs{A}=\begin{bmatrix} 2 & 3 \\ 1 & 4 \\ 7 & 6 \end{bmatrix}, \bs{B}=\begin{bmatrix} 5 \\ 2 \end{bmatrix

$ \begin{aligned} \bs{A}(\bs{B}+\bs{C})&=\begin{bmatrix} 2 & 3 \\ 1 & 4 \\ 7 & 6 \end{bmatrix}\

tương đương với

$ \begin{aligned} \bs{A}\bs{B}+\bs{A}\bs{C} &= \begin{bmatrix} 2 & 3 \\ 1 & 4 \\ 7 & 6 \end{

array([[1, 2],
       [3, 4],
       [5, 6]])
4

array([[1, 2],
       [3, 4],
       [5, 6]])
5

B = np.array([[2], [4]])
B
4

B = np.array([[2], [4]])
B
5

B = np.array([[2], [4]])
B
6

B = np.array([[2], [4]])
B
7

$\bs{A}(\bs{B}+\bs{C})$

B = np.array([[2], [4]])
B
8

B = np.array([[2], [4]])
B
9

tương đương với $\bs{AB}+\bs{AC}$

array([[2],
       [4]])
0

B = np.array([[2], [4]])
B
9

Phép nhân ma trận là kết hợp

$\bs{A}(\bs{BC}) = (\bs{AB})\bs{C}$

array([[1, 2],
       [3, 4],
       [5, 6]])
4

array([[1, 2],
       [3, 4],
       [5, 6]])
5

array([[1, 2],
       [3, 4],
       [5, 6]])
6

array([[1, 2],
       [3, 4],
       [5, 6]])
7

$\bs{A}(\bs{BC})$

array([[2],
       [4]])
6

array([[2],
       [4]])
7

tương đương với $(\bs{AB})\bs{C}$

array([[2],
       [4]])
8

array([[2],
       [4]])
7

Phép nhân ma trận không có tính chất giao hoán

$\bs{AB} \neq \bs{BA}$

C = np.dot(A, B)
C
0

C = np.dot(A, B)
C
1

array([[1, 2],
       [3, 4],
       [5, 6]])
6

array([[1, 2],
       [3, 4],
       [5, 6]])
7

$\bs{AB}$

C = np.dot(A, B)
C
4

C = np.dot(A, B)
C
5

khác với $\bs{BA}$

C = np.dot(A, B)
C
6

C = np.dot(A, B)
C
7

Tuy nhiên phép nhân véc tơ có tính chất giao hoán

$\bs{x^{ \text{T}}y} = \bs{y^{\text{T}}x} $

Hãy thử với ví dụ sau

C = np.dot(A, B)
C
8

C = np.dot(A, B)
C
9

array([[10],
       [22],
       [34]])
0

B = np.array([[2], [4]])
B
5

$\bs{x^\text{T}y}$

array([[10],
       [22],
       [34]])
2

array([[10],
       [22],
       [34]])
3

tương đương với $\bs{y^\text{T}x}$

array([[10],
       [22],
       [34]])
4

array([[10],
       [22],
       [34]])
3

Một cách để hiểu tại sao phép nhân vectơ có tính giao hoán là lưu ý rằng kết quả của $\bs{x^{ \text{T}}y}$ là một số vô hướng. Chúng ta biết rằng vô hướng bằng với chuyển vị của chính chúng, vì vậy về mặt toán học, chúng ta có

$\bs{x^{\text{T}}y} = (\bs{x^{\text{T}}y})^{\text{T}} = \bs{ y^{\text{

Hệ phương trình tuyến tính

Đây là một phần quan trọng giải thích tại sao đại số tuyến tính có thể rất hữu ích để giải nhiều bài toán khác nhau. Ở đây chúng ta sẽ thấy rằng nó có thể được sử dụng để biểu diễn các hệ phương trình

Một hệ phương trình là một tập hợp nhiều phương trình (ít nhất là 1). Ví dụ, chúng ta có thể có

$ \begin{cases} y = 2x + 1 \\ y = \frac{7}{2}x +3 \end{cases} $

Nó được xác định bởi số phương trình và số ẩn số của nó. Trong ví dụ này, có 2 phương trình (dòng thứ nhất và dòng thứ hai) và 2 ẩn số ($x$ và $y$). Ngoài ra, chúng tôi gọi đây là một hệ phương trình tuyến tính vì mỗi phương trình là tuyến tính. Chúng ta có thể biểu diễn điều đó theo 2 chiều. chúng ta có một đường thẳng cho mỗi phương trình và kích thước tương ứng với các ẩn số. Đây là đồ thị của phương trình đầu tiên

Phép nhân vô hướng của vectơ Python
Biểu diễn phương trình tuyến tính

Trong hệ phương trình của chúng ta, ẩn số là kích thước và số phương trình là số đường thẳng (trong 2D) hoặc mặt phẳng $n$ chiều

Sử dụng ma trận để mô tả hệ thống

Ma trận có thể được sử dụng để mô tả một hệ phương trình tuyến tính có dạng $\bs{Ax}=\bs{b}$. Đây là một hệ thống như vậy

$ A_{1,1}x_1 + A_{1,2}x_2 + A_{1,n}x_n = b_1 \\ A_{2,1}x_1 + A_{2,2}x_2 + A_{2,n}

Ẩn số (cái mà chúng ta muốn tìm để giải hệ) là các biến $x_1$ và $x_2$. Nó hoàn toàn giống với ví dụ trước nhưng với tất cả các biến ở cùng một phía. $y = 2x + 1$ trở thành $-2x + y = 1$ với $x$ tương ứng với $x_1$ và $y$ tương ứng với $x_2$. Ta sẽ có $n$ ẩn số và $m$ phương trình

Các biến được đặt tên $x_1, x_2, \cdots, x_n$ theo quy ước vì chúng ta sẽ thấy rằng nó có thể được tóm tắt trong vectơ $\bs{x}$

Phía tay trái

Vế trái có thể coi là tích của ma trận $\bs{A}$ chứa các trọng số cho mỗi biến ($n$ cột) và mỗi phương trình ($m$ hàng)

$ \bs{A}= \begin{bmatrix} A_{1,1} & A_{1,2} & \cdots & A_{1,n} \\ A_{2,1} & A_{2,2}

với một vectơ $\bs{x}$ chứa các ẩn số $n$

$ \bs{x}= \begin{bmatrix} x_1 \\ x_2 \\ \cdots \\ x_n \end{bmatrix} $

Tích vô hướng của $\bs{A}$ và $\bs{x}$ cho một tập hợp các phương trình. Đây là một ví dụ đơn giản

Phép nhân vô hướng của vectơ Python
Dạng ma trận của hệ phương trình tuyến tính

Ta có tập hai phương trình với hai ẩn số. Vì vậy, số hàng của $\bs{A}$ cho biết số phương trình và số cột cho biết số ẩn số

Cả hai mặt

Hệ phương trình có thể viết như vậy

$ \begin{bmatrix} A_{1,1} & A_{1,2} & \cdots & A_{1,n} \\ A_{2,1} & A_{2,2} & \cdots & A_{

Hoặc đơn giản

$\bs{Ax}=\bs{b}$

Ví dụ 4

Chúng tôi sẽ cố gắng chuyển đổi dạng phổ biến của phương trình tuyến tính $y=ax+b$ sang dạng ma trận. Nếu chúng tôi muốn giữ ký hiệu trước đó, chúng tôi sẽ có thay vào đó

$x_2=ax_1+b$

Đừng nhầm lẫn giữa biến $x_1$ và $x_2$ với vectơ $\bs{x}$. Vectơ này chứa tất cả các biến của phương trình của chúng tôi

$ \bs{x} = \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} $

Trong ví dụ này, chúng ta sẽ sử dụng phương trình sau

$ \begin{aligned} &x_2=2x_1+1 \\ \Leftrightarrow& 2x_1-x_2=-1 \end{aligned} $

Để kết thúc với hệ thống này khi chúng ta nhân $\bs{A}$ và $\bs{x}$, chúng ta cần $\bs{A}$ là một ma trận chứa trọng số của từng biến. Trọng số của $x_1$ là $2$ và trọng số của $x_2$ là $-1$

$ \bs{A}= \begin{bmatrix} 2 & -1 \end{bmatrix} $

Vì vậy chúng tôi có

$ \begin{bmatrix} 2 & -1 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} = \begin{bmatrix} 2x_1-1x_2 \end{bmatrix} $

Để hoàn thành phương trình ta có

$ \bs{b}= \begin{bmatrix} -1 \end{bmatrix} $

cái nào mang lại

$ \begin{bmatrix} 2 & -1 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} = \begin{bmatrix} -1 \end{bmatrix} $

Do đó, hệ phương trình này rất đơn giản và chỉ chứa 1 phương trình ($\bs{A}$ có 1 hàng) và 2 biến ($\bs{A}$ có 2 cột)

Tóm lại, $\bs{A}$ sẽ là một ma trận có kích thước $m\times n$ chứa các đại lượng vô hướng nhân các biến này (ở đây $x_1$ nhân với 2 và $x_2$ nhân với -1). Vectơ $\bs{x}$ chứa các biến $x_1$ và $x_2$. Và vế ​​phải là hằng số $\bs{b}$

$ \bs{A}= \begin{bmatrix} 2 & -1 \end{bmatrix} $

$ \bs{x}= \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} $

$ \bs{b}= \begin{bmatrix} -1 \end{bmatrix} $

Chúng ta có thể viết hệ thống này

$ \bs{Ax}=\bs{b} $

Chúng ta sẽ thấy ở phần cuối của chương tiếp theo rằng cách viết gọn các tập phương trình tuyến tính này có thể rất hữu ích. Nó cung cấp một cách để giải các phương trình

Người giới thiệu
  • Toán vui - Nhân ma trận

Vui lòng gửi cho tôi một email hoặc nhận xét. Giáo trình của loạt bài này có thể được tìm thấy trong bài giới thiệu. Tất cả các sổ ghi chép có thể được tìm thấy trên Github

Nội dung này là một phần của loạt bài tiếp theo chương 2 về đại số tuyến tính từ Deep Learning Book của Goodfellow, I. , Bengio, Y. , và Courville, A. (2016). Nó nhằm mục đích cung cấp trực giác/bản vẽ/mã trăn trên các lý thuyết toán học và được xây dựng theo hiểu biết của tôi về các khái niệm này. Bạn có thể kiểm tra giáo trình trong bài giới thiệu

trăn nhân vô hướng là gì?

Phép nhân vô hướng. Phép nhân vô hướng có thể được biểu diễn bằng cách nhân một đại lượng vô hướng với tất cả các phần tử trong ma trận vectơ .

Bạn có thể nhân một mảng với một vô hướng trong Python không?

Bạn có thể nhân các mảng có nhiều mảng với số vô hướng và nó hoạt động bình thường . Đây cũng là một thao tác rất nhanh và hiệu quả. Với ví dụ của bạn. >>> a_1 = np.

Một vectơ có thể được nhân với vô hướng không?

Khi nhân một vectơ với một đại lượng vô hướng thì độ lớn của vectơ thay đổi theo độ lớn của đại lượng vô hướng nhưng hướng của vectơ không đổi .

Hàm nào được sử dụng để nhân các vectơ trong Python?

nhân () trong Python. cục mịch. Hàm multi() được sử dụng khi chúng ta muốn tính phép nhân của hai mảng