Python 使用多维数组进行矩阵乘法
矩阵是一组按行和列排列的数字。具有m行和n列的矩阵被称为m X n矩阵,m和n被称为其维度。矩阵是一个二维数组,可以使用列表或NumPy数组在Python中创建。
一般来说,矩阵乘法可以通过将第一个矩阵的行与第二个矩阵的列相乘来完成。这里,第一个矩阵的列数应等于第二个矩阵的行数。
输入输出场景
假设我们有两个矩阵A和B,这两个矩阵分别具有2X3和3X2的维度。乘法得到的结果矩阵将具有2行1列。
[b1, b2]
[a1, a2, a3] * [b3, b4] = [a1*b1+a2*b2+a3*a3]
[a4, a5, a6] [b5, b6] [a4*b2+a5*b4+a6*b6]
此外,我们还可以对矩阵进行逐元素乘法运算。在这种情况下,两个输入矩阵的行数和列数必须相同。
[a11, a12, a13] [b11, b12, b13] [a11*b11, a12*b12, a13*b13]
[a21, a22, a23] * [b21, b22, b23] = [a21*b21, a22*b22, a23*b23]
[a31, a32, a33] [b31, b32, b33] [a31*b31, a32*b32, a33*b33]
使用for循环
通过一个嵌套的for循环,我们将对两个矩阵执行乘法操作,并将结果存储在第三个矩阵中。
示例
在这个示例中,我们将初始化一个结果矩阵,所有元素都是零,用于存储乘法的结果。
# Defining the matrix using multidimensional arrays
matrix_a = [[1,2,3],
[4,1,2],
[2,3,1]]
matrix_b = [[1,2,3,2],
[2,3,6,3],
[3,1,4,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_a)
print('The second matrix is defined as:')
display(matrix_b)
# Initializing Matrix with all 0s
result = [[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]]
# multiply two matrices
for i in range(len(matrix_a)):
# iterate through rows
for j in range(len(matrix_b[0])):
# iterate through columns
for k in range(len(matrix_b)):
result[i][j] = matrix_a[i][k] * matrix_b[k][j]
print('The multiplication of two matrices is:')
display(result)
输出
The first matrix is defined as:
[1, 2, 3]
[4, 1, 2]
[2, 3, 1]
The second matrix is defined as:
[1, 2, 3, 2]
[2, 3, 6, 3]
[3, 1, 4, 2]
The multiplication of two matrices is:
[9, 3, 12, 6]
[6, 2, 8, 4]
[3, 1, 4, 2]
第一个矩阵(matrix_a)的行数和列数为3,第二个矩阵(matrix_b)的行数为3,列数为4. 两个矩阵(matrix_a,matrix_b)相乘后,结果矩阵将有3行4列(即3X4)。
示例
这里使用numpy.array()函数创建矩阵,以便我们可以使用@运算符进行矩阵乘法。
import numpy as np
# Defining the matrix using numpy array
matrix_a = np.array([[1,2,5], [1,0,6], [9,8,0]])
matrix_b = np.array([[0,3,5], [4,6,9], [1,8,0]])
# Display two input matrices
print('The first matrix is defined as:')
print(matrix_a)
print('The second matrix is defined as:')
print(matrix_b)
# multiply two matrices
result = matrix_a @ matrix_b
print('The multiplication of two matrices is:')
print(result)
输出
The first matrix is defined as:
[[1 2 5]
[1 0 6]
[9 8 0]]
The second matrix is defined as:
[[0 3 5]
[4 6 9]
[1 8 0]]
The multiplication of two matrices is:
[[ 13 55 23]
[ 6 51 5]
[ 32 75 117]]
乘法运算符@在Python 3.5版本及以上可用,否则,我们可以使用numpy.dot()函数。
示例
在这个示例中,我们将使用(*)星号运算符对两个numpy数组进行逐元素乘法操作。
import numpy as np
# Defining the matrix using numpy array
matrix_a = np.array([[1,2,5], [1,0,6], [9,8,0]])
matrix_b = np.array([[0,3,5], [4,6,9], [1,8,0]])
# Display two input matrices
print('The first matrix is defined as:')
print(matrix_a)
print('The second matrix is defined as:')
print(matrix_b)
# multiply elements of two matrices
result = matrix_a * matrix_b
print('The element-wise multiplication of two matrices is:')
print(result)
输出
The first matrix is defined as:
[[1 2 5]
[1 0 6]
[9 8 0]]
The second matrix is defined as:
[[0 3 5]
[4 6 9]
[1 8 0]]
The element-wise multiplication of two matrices is:
[[ 0 6 25]
[ 4 0 54]
[ 9 64 0]]