📅  最后修改于: 2020-10-29 01:29:53             🧑  作者: Mango
在本文中,我们将介绍Python矩阵。我们将使用Python代码实现矩阵的每个操作。
矩阵是一个矩形的二维数组,它以行和列的形式存储数据。矩阵可以存储任何数据类型,例如数字,字符串,表达式等。在使用矩阵之前,我们必须熟悉矩阵的基本概念。数据按称为行的水平排列,而按列为垂直排列。矩阵内的元素数为(R)X(C),其中R为行,C为列。 Python没有矩阵的内置类型,因此我们将多个列表用作矩阵。
我们将学习以下应用于矩阵的运算。
下面的矩阵是2×2,这意味着它有两行两列。
[[2,4],
[5,6]]
我们可以使用嵌套列表在Python创建矩阵。所有元素都用方括号([])括起来,并用逗号分隔。让我们看下面的例子。
matrix = [[ 'Arun', 25, 90, 74],
["Sachin", 410, 87.50, 130]
[56, "Abhinay", 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]]
说明-
这两个矩阵的乘法与上面的代码相同,只是我们需要将运算符+更改为*。让我们了解以下示例。
范例-
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循环用于print矩阵格式的输入数据。
使用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.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 [行开始:行结束,列开始:行结束]
在以上语法中-
我们将在下面的矩阵中执行切片。
mat1 = np.array([[4, 10, 60, 18, 20],
[35, 16, 19, -12, 41],
[23, 80, 42, 24, -20],
[7, -10, 15, 40, 17]])
上面的矩阵由四行组成。第0个原始数据为[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库创建矩阵。