Python 矩阵
在本教程中,我们将学习关于Python矩阵。在Python中,矩阵对象类似于嵌套列表,因为它们具有多维性。我们将看到如何使用Numpy数组创建矩阵。在此之后,我们将看到各种矩阵操作方法和示例,以便更好地理解。
Python中的矩阵是什么
在Python中,矩阵是一个矩形的Numpy数组。该数组必须是二维的。它包含存储在数组的行和列中的数据。在Python矩阵中,水平的项目序列被称为“行”,而垂直的项目序列被称为“列”。行和列像嵌套列表一样堆叠在一起。如果一个矩阵包含r行和c列,其中r和c是正整数,则r x c确定了该矩阵对象的顺序。
我们可以在矩阵中存储字符串,整数和其他数据类型的对象。数据存储在矩阵的行和列的堆栈中。矩阵是计算数学和科学中的重要数据结构。在Python中,我们认为列表的列表或嵌套列表是一个矩阵,因为Python不包含任何用于矩阵对象的内置类型。
在本教程中,我们将介绍以下一系列矩阵操作方法。
- 矩阵加法
- 矩阵乘法
- 矩阵乘法操作符
- 无Numpy的矩阵乘法
- 矩阵逆
- 矩阵转置
- 矩阵转换为数组
Python中的矩阵如何工作
我们使用二维数组来创建一个矩阵。操作如下:
示例
[ 2 3 5 7 6
3 2 6 7 2
5 7 2 6 1 ]
它显示一个3行5列的矩阵,所以它的维度是3×5。整数数据类型对象组成了这个矩阵的数据。第一行(Row1)的值为(2,3,5,7,6),第二行(Row2)的值为(3,2,6,7,2),第三行(Row3)的值为(5,7,2,6,1)。关于列,第一列(Column1)的值为(2,3,5),第二列(Column2)的值为(3,2,7),以此类推。
示例
[ 0, 0, 1
0, 1, 0
1, 0, 0 ]
它显示了一个具有3行3列的矩阵,因此它的维数是3×3。具有相等行和列的矩阵称为方阵。
同样,Python允许用户将数据存储在m x n维矩阵内。我们可以对类似矩阵的结构执行矩阵的加法、乘法、转置和其他操作。
Python中的矩阵对象的实现并不简单。我们可以使用数组来创建Python矩阵,并且可以类似地使用它们。
NumPy数组
科学计算软件NumPy支持一个强大的N维数组对象。在使用NumPy之前,需要先安装它。
安装完成后,可以使用和导入NumPy。了解Numpy数组的基本知识将有助于理解矩阵。
NumPy提供了具有多个维度项的数组。以下是一个示例:
代码
# Python program to show how to create a Numpy array
# Importing numpy
import numpy as np
# Creating a numpy array
array = np.array([4, 6, "Harry"])
print(array)
print("Data type of array object: ", type(array))
输出:
['4' '6' 'Harry']
Data type of array object: <class 'numpy.ndarray'>
如我们所见,Numpy数组属于ndarray类。
使用Numpy数组创建矩阵的示例
想象一下我们创建一个学生成绩记录的场景。我们将记录学生的姓名和两科目的成绩,分别是Python编程和Matrix。我们将使用numpy数组创建一个二维矩阵,然后进行reshape操作。
代码
# Python program to create a matrix using numpy array
# Importing numpy
import numpy as np
# Creating the matrix
record = np.array( [['Itika', 89, 91],
['Aditi', 96, 82],
['Harry', 91, 81],
['Andrew', 87, 91],
['Peter', 72, 79]])
matrix = np.reshape(record, (5,3))
print("The matrix is: \n", matrix)
输出:
The matrix is:
[['Itika' '89' '91']
['Aditi' '96' '82']
['Harry' '91' '81']
['Andrew' '87' '91']
['Peter' '72' '79']]
使用Numpy矩阵方法创建矩阵的示例
我们可以使用numpy.matrix来创建一个2D矩阵。
代码
# Python program to show how to create a matrix using the matrix method
# importing numpy
import numpy as np
# Creating a matrix
matrix = np.matrix('3,4;5,6')
print(matrix)
输出:
[[3 4]
[5 6]]
访问矩阵的值
矩阵的索引可以用来访问存储在其中的元素。使用访问二维数组的方法可以访问存储在矩阵中的数据。
代码
# Python program to access elements of a matrix
# Importing numpy
import numpy as np
# Creating the matrix
record = np.array( [['Itika', 89, 91],
['Aditi', 96, 82],
['Harry', 91, 81],
['Andrew', 87, 91],
['Peter', 72, 79]])
matrix = np.reshape(record, (5,3))
# Accessing record of Itika
print( matrix[0] )
# Accessing marks in the matrix subject of Andrew
print( "Andrew's marks in Matrix subject: ", matrix[3][2] )
输出:
['Itika' '89' '91']
Andrew's marks in Matrix subject: 91
创建2-D Numpy数组或矩阵的方法
有几种方法可以创建二维的NumPy数组,从而得到一个矩阵。可以提供行和列的条目
可以提供整数、浮点数,甚至是复数。使用数组方法的dtype属性,可以指定我们想要的数据类型。
代码
# Python program to show how to create a Numpy array
# Importing numpy
import numpy as np
# Creating numpy arrays
array1 = np.array([[4, 2, 7, 3], [2, 8, 5, 2]])
print("Array of data type integers: \n", array1)
array2 = np.array([[1.5, 2.2, 3.1], [3, 4.4, 2]], dtype = "float")
print("Array of data type float: \n", array2)
array3 = np.array([[5, 3, 6], [2, 5, 7]], dtype = "complex")
print("Array of data type complex numbers: \n", array3)
输出:
Array of data type integers:
[[4 2 7 3]
[2 8 5 2]]
Array of data type float:
[[1.5 2.2 3.1]
[3. 4.4 2. ]]
Array of data type complex numbers:
[[5.+0.j 3.+0.j 6.+0.j]
[2.+0.j 5.+0.j 7.+0.j]]
由零和一构成的数组
代码
# Python program to show how to create a Numpy array having zeroes and ones
# Importing numpy
import numpy as np
# Creating numpy arrays
zeores_array = np.zeros( (3, 2) )
print(zeores_array)
ones_array = np.ones( (2, 4), dtype=np.int64 )
print(ones_array)
输出:
[[0. 0.]
[0. 0.]
[0. 0.]]
[[1 1 1 1]
[1 1 1 1]]
这里,我们指定了64位的dtype。
使用arange()和shape()方法
代码
# Python program to show how to create Numpy array using arrange() and shape() methods
# Importing numpy
import numpy as np
# Creating numpy arrays
array1 = np.arange( 5 )
print(array1)
array2 = np.arange( 6 ).reshape( 2, 3 )
print(array2)
输出:
[0 1 2 3 4]
[[0 1 2]
[3 4 5]]
Python矩阵运算
Python矩阵加法
我们将添加这两个矩阵,并使用嵌套的for循环遍历给定的矩阵。
代码
# Python program to add two matrices without using numpy
# Creating matrices in the form of nested lists
matrix1 = [[23, 43, 12],
[43, 13, 55],
[23, 12, 13]]
matrix2 = [[4, 2, -1],
[5, 4, -34],
[0, -4, 3]]
matrix3 = [[0,1,0],
[1,0,0],
[0,0,1]]
matrix4 = [[0,0,0],
[0,0,0],
[0,0,0]]
matrices_length = len(matrix1)
#Adding the three matrices using nested loops
for row in range(len(matrix1)):
for column in range(len(matrix2[0])):
matrix4[row][column] = matrix1[row][column] + matrix2[row][column] + matrix3[row][column]
#Printing the final matrix
print("The sum of the matrices is = ", matrix4)
输出:
The sum of the matrices is = [[27, 46, 11], [49, 17, 21], [23, 8, 17]]
Python矩阵乘法
Python矩阵乘法运算符
在Python中,@被称为乘法运算符。让我们看一个示例,在这个示例中我们将使用这个运算符来乘以两个矩阵。
代码
# Python program to show how to create a matrix using the matrix method.
# importing numpy
import numpy as np
# Creating the matrices
matrix1 = np.matrix('3,4;5,6')
matrix2 = np.matrix('4,6;8,2')
# Usng multiplication operator to multiply two matrices
print(matrix1 @ matrix2)
输出:
[[44 26]
[68 42]]
Python矩阵乘法不使用Numpy
另一种矩阵乘法的方法是使用嵌套循环。以下是一个示例。
代码
# Python program to show how to create a matrix using the matrix method
# importing numpy
import numpy as np
# Creating two matrices
matrix1 = [[4, 6, 2],
[7, 4, 8],
[6, 2, 7]]
matrix2 = [[4, 6, 8, 2],
[6, 5, 3, 7],
[7, 3, 7, 6]]
# Result will be a 3x4 matrix
output = [[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
# Iterating through the rows of matrix1
for i in range(len(matrix1)):
# iterating through the columns of matrix2
for j in range(len(matrix2[0])):
# iterating through the rows of matrix2
for k in range(len(matrix2)):
output[i][j] += matrix1[i][k] * matrix2[k][j]
for row in output:
print(row)
输出:
[66, 60, 64, 62]
[108, 86, 124, 90]
[85, 67, 103, 68]
Python矩阵求逆
当需要解一个方程以获得满足方程的未知变量的值时,计算矩阵的逆就是计算矩阵的倒数,就像我们在普通数学中所做的那样。矩阵的逆是与原始矩阵相乘时得到单位矩阵的矩阵。只有非奇异矩阵才能有逆。非奇异矩阵具有非零行列式。
代码
# Python program to show how to calculate the inverse of a matrix
# Importing the required library
import numpy as np
# Creating a matrix
A = np.matrix("3, 4, 6; 6, 2, 7; 6, 4, 6")
# Calculating the inverse of A
print(np.linalg.inv(A))
输出:
[[-3.33333333e-01 -7.40148683e-17 3.33333333e-01]
[ 1.25000000e-01 -3.75000000e-01 3.12500000e-01]
[ 2.50000000e-01 2.50000000e-01 -3.75000000e-01]]
Python矩阵的转置
Python矩阵转置(无需Numpy库)
矩阵的转置涉及到行和列的交换。我们将把矩阵X中第i行第j列的元素放置在矩阵X’的第j行第i列。因此,如果原始矩阵X为3×4矩阵,则X’将成为一个4×3矩阵。
代码
# Python program to find the transpose of a matrix using nested loops
# Creating a matrix
matrix = [[4, 6, 7, 8],
[3, 7, 2, 7],
[7, 3, 7, 5]]
result = [[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
# iterating through the rows
for i in range(len(matrix)):
# iterating through the columns
for j in range(len(matrix[0])):
result[j][i] = matrix[i][j]
for row in result:
print(row)
输出:
[4, 3, 7]
[6, 7, 3]
[7, 2, 7]
[8, 7, 5]
Python使用Numpy进行矩阵转置
我们可以使用Numpy中的matrix.transpose()方法来获取矩阵的转置。
代码
# Python program to find the transpose of a matrix
# importing the required module
import numpy as np
# Creating a matrix using matrix method
matrix = np.matrix('[5, 7, 6; 4, 2, 4]')
#finding transpose using matrix.transpose method
transpose = matrix.transpose()
print(transpose)
输出:
[[5 4]
[7 2]
[6 4]]
将Python矩阵转换为数组
我们可以使用ravel和flatten函数将Python矩阵转换为Python数组。
代码
# Python program to convert a matrix to an array
# importing the required module
import numpy as np
# Creating a matrix using numpy
matrix = np.matrix("[4, 6, 7; 5, 2, 6; 6, 3, 6]")
# Using ravel() function to covert matrix to array
array = matrix.ravel()
print(array)
# Using flatten() function to covert matrix to array
array = np.asarray(matrix).flatten()
print(array)
# Using reshape() function to covert matrix to array
array = (np.asarray(matrix)).reshape(-1)
print(array)
输出:
[[4 6 7 5 2 6 6 3 6]]
[4 6 7 5 2 6 6 3 6]
[4 6 7 5 2 6 6 3 6]