Python程式:透過函式傳遞矩陣來實現兩個矩陣的乘法


矩陣是由許多數字以行和列排列組成的二維陣列。它被稱為m X n矩陣,其中m和n是矩陣的維度。

通常,兩個矩陣的乘法只有在第一個矩陣的列數等於第二個矩陣的行數時才可能。

輸入輸出場景

假設我們有兩個輸入矩陣A和B,它們都具有3X3行和列。那麼結果矩陣也將具有3行和3列。

[a, b, c]		[j, k, l]	 [(a*j+b*m+c*p), (a*k+b*n+c*q), (a*l+b*o+c*r)]
[d, e, f]	*	[m, n, o]  =  [(d*j+e*m+f*p), (d*k+e*n+f*q), (d*l+e*o+f*r)]
[g, h, i]		[p, q, r]	 [(g*j+h*m+i*p), (g*k+h*n+i*q), (g*l+h*o+i*r)]

矩陣的逐元素乘法解釋如下。在這種情況下,兩個輸入矩陣的行數和列數必須相同。

[a, b, c]          [j, k, l]		[(a*j), (b*k), (c*i)]
[d, e, f]    *     [m, n, o]    =	[(d*e), (e*n), (f*o)]
[g, h, i]          [p, q, r]	  	[(g*p), (h*q), (i*r)]

讓我們透過將兩個矩陣傳遞給函式來實現矩陣乘法

使用迴圈

我們將使用Python中的def關鍵字定義一個使用者自定義函式來乘以兩個矩陣。在函式中,我們聲明瞭一個零矩陣,它將儲存結果矩陣。然後,透過使用for迴圈迭代兩個矩陣的行和列,我們將兩個矩陣的元素相乘並將結果儲存在結果矩陣中。

示例

在下面的示例中,我們將透過將兩個矩陣傳遞給使用者定義的函式來實現矩陣乘法。

def multiply(A,B):
   result=[[0,0,0],[0,0,0],[0,0,0]]
    
   #for rows
   for i in range(len(A)):
      #for columns
      for j in range(len(B[0])):
         #for rows of matrix B
         for k in range(len(B)):
            result[i][j] += A[i][k] * B[k][j]

   for p in result:
      print(p)
   return

#function for displaying matrix
def display(matrix):
   for row in matrix:
      print(row)
   print()

matrix_1 = [[2, 1, 2],[3, 2, 2], [1, 1, 2]]
matrix_2 = [[1, 5, 3],[4, 2, 1], [1, 2, 2]]

# Display two input matrices
print('The first matrix is defined as:') 
display(matrix_1)
print('The second matrix is defined as:')
display(matrix_2)

print("Result: ")
multiply(matrix_1,matrix_2)

輸出

The first matrix is defined as:
[2, 1, 2]
[3, 2, 2]
[1, 1, 2]

The second matrix is defined as:
[1, 5, 3]
[4, 2, 1]
[1, 2, 2]

Result: 
[8, 16, 11]
[13, 23, 15]
[7, 11, 8]

在這裡,我們將使用一些內建的NumPy函式來計算兩個矩陣的乘積。

使用NumPy.matmul()函式

matmul()函式將執行傳遞給函式的兩個輸入的矩陣乘法。

示例

首先,我們匯入NumPy模組,並應用np.matmul()函式來計算兩個矩陣的乘積。

import numpy as np 
matrix_1 = np.array([[2, 1, 2],[3, 2, 2], [1, 1, 2]])  
matrix_2 =np.array([[1, 5, 3],[4, 2, 1], [1, 2, 2]])  

#function for displaying matrix
def display(matrix):
   for row in matrix:
      print(row)
   print()

# Display two input matrices
print('The first matrix is defined as:') 
display(matrix_1)
print('The second matrix is defined as:')
display(matrix_2)

print("Result: ")
print(np.matmul(matrix_1 ,matrix_2))

輸出

The first matrix is defined as:
[2 1 2]
[3 2 2]
[1 1 2]

The second matrix is defined as:
[1 5 3]
[4 2 1]
[1 2 2]

Result: 
[[ 8 16 11]
 [13 23 15]
 [ 7 11  8]]

使用NumPy.multiply()函式

它將執行兩個輸入矩陣的逐元素乘法運算。

示例

首先,我們將使用numpy.array()函式建立兩個矩陣。然後,使用np.multiply()函式計算兩個矩陣的逐元素乘法。

import numpy as np 

matrix_1 = np.array([[2, 1, 2],[3, 2, 2], [1, 1, 2]])  
matrix_2 =np.array([[1, 5, 3],[4, 2, 1], [1, 2, 2]])  

#function for displaying matrix
def display(matrix):
   for row in matrix:
      print(row)
   print()

# Display two input matrices
print('The first matrix is defined as:') 
display(matrix_1)
print('The second matrix is defined as:')
display(matrix_2)

print("Result: ")
print(np.multiply(matrix_1 ,matrix_2))

輸出

The first matrix is defined as:
[2 1 2]
[3 2 2]
[1 1 2]
The second matrix is defined as:
[1 5 3]
[4 2 1]
[1 2 2]

Result: 
[[ 2  5  6]
 [12  4  2]
 [ 1  2  4]]

使用NumPy.dot()函式

dot()函式將對兩個輸入矩陣執行點積運算。

示例

我們將向np.dot()函式提供兩個NumPy陣列,以執行兩個輸入的點積運算。

import numpy as np 

matrix_1 = np.array([[2, 1, 2],[3, 2, 2], [1, 1, 2]])  
matrix_2 =np.array([[1, 5, 3],[4, 2, 1], [1, 2, 2]])  

#function for displaying matrix
def display(matrix):
   for row in matrix:
      print(row)
   print()

# Display two input matrices
print('The first matrix is defined as:') 
display(matrix_1)
print('The second matrix is defined as:')
display(matrix_2)

print("Result: ")
print(np.dot(matrix_1 ,matrix_2))

輸出

The first matrix is defined as:
[2 1 2]
[3 2 2]
[1 1 2]

The second matrix is defined as:
[1 5 3]
[4 2 1]
[1 2 2]

Result: 
[[ 8 16 11]
 [13 23 15]
 [ 7 11  8]]

更新於: 2023年5月15日

208 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.