您的位置:

Python 矩阵

在本文中,我们将介绍 Python 中的矩阵。我们将使用 Python 代码实现矩阵的每个操作。

介绍

矩阵是以行和列存储数据的矩形二维数组。矩阵可以存储任何数据类型,如数字、字符串、表达式等。在使用矩阵之前,我们必须熟悉它的基本概念。数据排列成水平的行,垂直排列成列。矩阵内部的元素个数是(R) X (C),其中 R 是行,C 是列。 Python 没有矩阵的内置类型,所以我们将使用多个列表作为矩阵。

我们将学习以下应用于矩阵的运算。

  • 矩阵加法
  • 矩阵减法
  • 矩阵乘法
  • 数积
  • 交叉乘积
  • 许多其他操作

矩阵的工作

下面的矩阵是 2x2,这意味着它有两行两列。


[[2,4],
[5,6]]

用 Python 创建矩阵

我们可以使用嵌套列表在 Python 中创建矩阵。所有元素都用方括号([])括起来,并用逗号分隔。让我们看看下面的例子。


matrix = [[ 'Arun',  25, 90, 74],
["Sachin", 410, 87.50, 130]
[56, "Abhinay", 253, 471]
  • 我们使用嵌套列表创建了一个 3x3 矩阵。
  • 第一行包含列表形式的 ['Arun ',25,90,74] 。
  • 第二行列表形式包含【‘萨钦’,410,87.50,130】。
  • 第三行包含列表形式的【56,“阿比奈”,253,471】。
  • 我们注意到我们的矩阵由数字和一个字符串值组成。

读取矩阵数据

在下面的示例中,我们将读取已定义矩阵的每一行。

示例-


matrix = [[ 'Arun',  25, 90, 74],
['Sachin', 410, 87.50, 130],
[56, 'Abhinay', 253, 471]]

print("The matrix is: ", matrix)

输出:


The matrix is:  [['Arun', 25, 90, 74], ['Sachin', 410, 87.5, 130], [56, 'Abhinay', 253, 471]]

读取每行的最后一个元素

在下面的例子中,我们将使用 Python 程序读取每行的最后一个元素。

示例-


matrix = [[ 'Arun',  25, 90, 74],
['Sachin', 410, 87.50, 130],
[56, 'Abhinay', 253, 471]]

matrix_length = len(matrix)

#To read the last element from each row.
for i in range(matrix_length):
    print(matrix[i][-1])

输出:

74
130
471

解释-

在上面的代码中,我们创建了一个矩阵,我们得到了矩阵的长度。我们使用 for循环迭代每一行,并打印结果。

我们可以使用上述方法读取任何行或列。

让我们理解矩阵的以下操作。

相加两个矩阵

我们将相加两个矩阵,并使用嵌套 for循环遍历给定的矩阵。

示例-


mat1 = [[10, 13, 44], 
      [11, 2, 3], 
      [5, 3, 1]]

mat2 = [[7, 16, -6],
           [9, 20, -4], 
           [-1, 3 , 27]]

mat3  = [[0,0,0],
       [0,0,0],
       [0,0,0]]
matrix_length = len(mat1)

#To Add mat1 and mat2 matrices
for i in range(len(mat1)):
    for k in range(len(mat2)):
        mat3[i][k] = mat1[i][k] + mat2[i][k]

#To Print the matrix
print("The sum of Matrix mat1 and mat2 = ", mat3)

输出:

The sum of Matrix M1 and M2 =  [[17, 29, 38], [20, 22, -1], [4, 6, 28]]

解释-

  • 第一和第二矩阵是 3X3。
  • 我们初始化了另一个矩阵 mat3,它将存储结果矩阵。
  • 我们应用嵌套 for循环迭代矩阵,外部循环迭代第一个矩阵。
  • 控制转移内部循环;它迭代到第二个内部循环,这里 I 的值为零,k 也为零。
  • 在第一次迭代中,彼此相加的 mat1 和 mat2 的第一个元素将继续,直到所有元素都被添加。

两个矩阵的乘法

两个矩阵相乘和上面的代码一样,只需要把运算符+改成*。让我们理解下面的例子。

示例-


mat1 = [[10, 13, 44],
      [11, 2, 3],
      [5, 3, 1]]

mat2 = [[7, 16, -6],
           [9, 20, -4],
           [-1, 3 , 27]]

mat3  = [[0,0,0],
       [0,0,0],
       [0,0,0]]
matrix_length = len(mat1)

#To Add mat1 and mat2 matrices
for i in range(len(mat1)):
    for k in range(len(mat2)):
        mat3[i][k] = mat1[i][k]  * mat2[i][k]

#To Print the matrix
print("The sum of Matrix mat1 and mat2 = ", mat3)

输出:

The sum of Matrix mat1 and mat2 =  [[70, 208, -264], [99, 40, -12], [-5, 9, 27]]

矩阵的转置

转置是给定矩阵的行转换成列的操作,反之亦然。让我们理解下面的例子。

示例-


# Program to transpose a matrix using a nested loop

mat1 = [[12,7],
    [4 ,5],
    [3 ,8]]

res = [[0,0,0],
         [0,0,0]]

# iterate through rows
for i in range(len(mat1)):
   # iterate through columns
   for j in range(len(mat1[0])):
       res[j][i] = mat1[i][j]

for r in res:
   print(r)

输出:

[12, 4, 3]
[7, 5, 8]

解释

在上面的代码中,我们有两个 for循环来遍历每一行和每一列。我们可以看到,在上面的输出中,我们指定了 mat1[i][j]和 res[j][k]。

使用列表推导的转置矩阵

我们可以用列表推导来转置一行代码的矩阵。让我们理解下面的例子。

示例-


mat1 = [[12,7],
    [4 ,5],
    [3 ,8]]

res = [[0,0,0],
         [0,0,0]]

res = [[mat1[j][i] for j in range(len(mat1))] for i in range(len(mat1[0]))]

for r in res:
   print(r)

输出:

[12, 4, 3]
[7, 5, 8]

输出同上。列表推导减少了代码行,并调换了矩阵。

从用户处获取矩阵输入

到目前为止,我们已经讨论了预定义矩阵。但是如果用户想输入他们的数据。因此,我们定义了以下用户定义矩阵的示例。

示例-


# A example for matrix input from user 
row = int(input("Enter the number of rows:")) 
column = int(input("Enter the number of columns:")) 

# Initialize empty matrix 
matrix = [] 
print("Enter the entries row wise:") 

# For user input 
for i in range(row):       # A outer for loop for row entries 
   a =[] 
   for j in range(column):     # A inner for loop for column entries 
      a.append(int(input())) 
   matrix.append(a) 

# For printing the matrix 
for i in range(row): 
   for j in range(column): 
      print(matrix[i][j], end = " ") 
   print() 

输出:

Enter the number of rows:3
Enter the number of columns:3
Enter the entries row wise:
5
6
7
8
9
2
4
3
1
5 6 7 
8 9 2 
4 3 1

解释-

在上面的代码中,我们接受了用户输入的行数和列数。我们已经输入了 3 行 3 列;这意味着矩阵将有 9 个元素。在 for循环中,使用 append()函数将元素插入到空矩阵中。第二个 for循环用于以矩阵格式打印输入数据。

使用 Numpy 和 map()功能

Python 提供了外部库 Numpy。它用于科学计算;我们将在下一节学习矩阵 Numpy。我们将把它用于用户输入矩阵。

示例-

使用数字库创建矩阵

Numpy 库帮助我们处理数组。要使用 Numpy,我们需要使用以下命令安装 Numpy。


pip install Numpy 

成功安装后,我们必须将其导入到我们的程序中。


import numpy as np

让我们理解下面的例子。

示例-


import numpy as np
mat1 = np.array([[10, -5, 15], [30, -6, 91], [2, 8, 7]])
print("The matrix is: ")
print(mat1)

输出:

The matrix is: 
[[10 -5 15]
[30 -6 91]
[ 2  8  7]]

用 Numpy 进行矩阵运算

我们可以使用 numpy.array() 执行所有矩阵运算,如加法、减法、转置、矩阵切片等。

矩阵加法

我们将使用 numpy.array() 函数创建两个矩阵,并使用+运算符添加它们。让我们理解下面的例子。

示例-


import numpy as np
mat1 = np.array([[7, 8, 9], [3, -1, 17], [15, 10, 21]])
mat2 = np.array([[9, -18, 27], [11, 22, 33], [13, -26, 39]])
mat3 = mat1 + mat2  
print("The matrix addition is: ")
print(mat3)

输出:

The matrix addition is: 
[[ 16 -10  36]
 [ 14  21  50]
 [ 28 -16  60]]

矩阵乘法

我们将使用 mumpy.dot() 方法将两个矩阵相乘。它是矩阵 mat1 和 mat2 的点乘法,处理 2D 阵列并执行乘法。让我们理解下面的例子。

示例-


import numpy as np
mat1 = np.array([[4, 6], [5, 10]])
mat2 =  np.array([[3, -1], [11, 22]])
mat3 = mat1.dot(mat2)  
print("The matrix is:")
print(mat3)

输出:

The matrix is:
[[ 78 128]
 [125 215]]

矩阵的切片

我们可以像在 Python 标准列表中一样分割矩阵的元素。切片根据开始/结束索引返回元素。我们也可以负切片。语法如下。

语法-


arr[start: end] 

arr 代表矩阵名称。默认情况下,起始索引为 0,例如- [:3],这意味着起始索引为 0。如果我们不提供结束值,它将考虑数组的长度。我们可以将负索引值传递给开始和结束。在下面的例子中,我们将在普通数组中应用切片来理解切片是如何工作的。

示例-


import numpy as np

arr = np.array([10,40,61,14,25,12,97])
print(arr[2:5]) # It will print the elements from 2 to 4
print(arr[:4]) # It will print the elements from 0 to 3
print(arr[3:]) # It will print the elements from 3 to length of the array.

输出:

[61 14 25]
[10 40 61 14]
[14 25 12 97]

现在,我们将在矩阵上实现切片。要对矩阵执行切片,请遵循以下语法。

Mat1[row_start:row_end,col_start:col_end]

在上面的语法中-

  • 第一个开始/结束表示选择矩阵行的行。
  • 第一个开始/结束表示选择矩阵列的列。

我们将在下面的矩阵中执行切片。


mat1 = np.array([[4, 10, 60, 18, 20],
    [35, 16, 19, -12, 41],
    [23, 80, 42, 24, -20],
    [7, -10, 15, 40, 17]])

上面的矩阵由四行组成。第 0 个 raw 有[4,10,60,18,20],第 1 行有[35,16,19,-12,41]等等。它有五列。让我们理解下面的例子。

示例-


import numpy as np 
mat1 = np.array([[4, 10, 60, 18, 20],
    [35, 16, 19, -12, 41],
    [23, 80, 42, 24, -20],
    [7, -10, 15, 40, 17]])
print(mat1[1:3, 1:4])

输出:

[[ 16  19 -12]
 [ 80  42  24]]

解释

在上面的示例中,我们打印了第一行和第二行,并对第一、第二和第三列进行了切片。根据切片语法,我们可以得到任何行和列。

示例-打印第一行和所有列


import numpy as np
mat1 = np.array([[4, 10, 60, 18, 20],
    [35, 16, 19, -12, 41],
    [23, 80, 42, 24, -20],
    [7, -10, 15, 40, 17]])
print(mat1[:1, ])

输出:

[ 4 10 60 18 20]]

示例-打印矩阵的行


import numpy as np
mat1 = np.array([[14, 60, 29], [35, -10, 13], [4,8,12]])
print(mat1[0])  #first row
print(mat1[1]) # the second row
print(mat1[-1]) # -1 will print the last row

输出:

[14 60 29]
[ 35 -10  13]
[ 4  8 12]

结论

到目前为止,我们已经讨论了使用 Python 的基本矩阵。我们已经学会了用不同的方法创建矩阵。Python 矩阵是一个专门的二维矩形数据列表。矩阵可以由数字、字符串、表达式、符号等组成。Python 没有提供实现矩阵数据类型的直接方法。我们可以使用嵌套列表和 Numpy 库来创建矩阵。