使用多维数组的Python程序来求解矩阵乘法

使用多维数组的Python程序来求解矩阵乘法

矩阵是以行和列排列的数字集合。有m行和n列的矩阵称为m × n矩阵,m和n称为它的维度。矩阵是一个二维数组,可以使用python中的列表或NumPy数组来创建。

一般来说,矩阵乘法可以通过将第一个矩阵的行与第二个矩阵的列相乘来完成。其中,第一个矩阵的列数应等于第二个矩阵的行数。

输入输出场景

假设我们有两个矩阵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循环,我们将在两个矩阵上执行乘法运算,并将结果存储在第三个矩阵中。

示例

在此示例中,我们将使用所有零初始化结果矩阵以存储乘法结果。

# 使用多维数组定义矩阵
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]]

# 定义显示矩阵的函数
def display(matrix):
   for row in matrix:
      print(row)
   print()

# 显示两个输入矩阵
print('第一个矩阵定义如下:') 
display(matrix_a)
print('第二个矩阵定义如下:')
display(matrix_b)

# 初始化所有为0的矩阵
result = [[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]]

# 两个矩阵相乘
for i in range(len(matrix_a)):

   # 遍历矩阵A的行
   for j in range(len(matrix_b[0])):

      # 遍历矩阵B的列
      for k in range(len(matrix_b)):        
         result[i][j] = matrix_a[i][k] * matrix_b[k][j]

print('两个矩阵的乘法结果为:')
display(result)

输出

第一个矩阵定义如下:
[1, 2, 3]
[4, 1, 2]
[2, 3, 1]

第二个矩阵定义如下:
[1, 2, 3, 2]
[2, 3, 6, 3]
[3, 1, 4, 2]

两个矩阵的乘法结果为:
[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

# 使用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]])

# 显示两个输入矩阵
print('第一个矩阵定义如下:') 
print(matrix_a)

print('第二个矩阵定义如下:')
print(matrix_b)

# 两个矩阵相乘
result = matrix_a @ matrix_b

print('两个矩阵的乘法结果为:')
print(result) 

输出

第一个矩阵定义如下:
[[1 2 5]
[1 0 6]
[9 8 0]]
第二个矩阵定义如下:
[[0 3 5]
[4 6 9]
[1 8 0]]
两个矩阵的乘积为:
[[13 55 23]
[6 51 5]
[32 75 117]]

乘法运算符@在Python 3.5以上版本中可用,否则我们可以使用numpy.dot()函数。

示例

在此示例中,我们将使用(*)asterisk运算符对两个numpy数组执行逐元素乘法运算。

import numpy as np

# 使用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]])

# 显示两个输入矩阵
print('第一个矩阵定义如下:') 
print(matrix_a)

print('第二个矩阵定义如下:')
print(matrix_b)

# 两个矩阵的乘积
result = matrix_a * matrix_b

print('两个矩阵逐元素相乘的结果为:')
print(result)

输出

第一个矩阵定义如下:
[[1 2 5]
 [1 0 6]
 [9 8 0]]
第二个矩阵定义如下:
[[0 3 5]
 [4 6 9]
 [1 8 0]]
两个矩阵逐元素相乘的结果为:
[[ 0  6 25]
 [ 4  0 54]
 [ 9 64  0]]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程