📅  最后修改于: 2023-12-03 14:44:49.703000             🧑  作者: Mango
NumPy(Numerical Python)是一个针对数值计算的Python库,它为Python提供了高效的多维数组(ndarray)操作支持,以及用于处理这些数组的基本数学函数。NumPy也包括一些线性代数工具,这些工具可以用于各种数值线性代数计算。本文将介绍NumPy线性代数的基本使用方法。
使用NumPy之前,需要先安装它。可以使用pip来安装它:
pip install numpy
安装完NumPy之后,要使用它,需要在Python程序中导入它:
import numpy as np
通常,我们将它简写为np,这样我们就可以使用NumPy中的各种函数和类了。
NumPy中的ndarray类是其最重要的数据类型之一,它用于存储和操作数值数据。可以使用NumPy中的一些函数来创建数组。
使用np.array()
方法创建一个数组,例如创建一个一维数组:
a = np.array([1, 2, 3])
print(a)
输出:
[1 2 3]
使用np.arange()
方法创建一个一维数组,例如创建一个从0到9的数组:
a = np.arange(10)
print(a)
输出:
[0 1 2 3 4 5 6 7 8 9]
使用np.zeros()
方法创建一个数组,例如创建一个2x3的全0数组:
a = np.zeros((2, 3))
print(a)
输出:
[[0. 0. 0.]
[0. 0. 0.]]
使用np.ones()
方法创建一个数组,例如创建一个3x3的全1数组:
a = np.ones((3, 3))
print(a)
输出:
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
使用np.eye()
方法创建一个单位矩阵,例如创建一个3x3的单位矩阵:
a = np.eye(3)
print(a)
输出:
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
使用np.random.rand()
方法创建一个数组,例如创建一个2x2的随机数组:
a = np.random.rand(2, 2)
print(a)
输出:
[[0.25850067 0.17662381]
[0.78853817 0.26626529]]
创建好数组后,可以查看并修改其属性。以下是一些常用的数组属性:
shape
属性:数组的形状,是一个元组。ndim
属性:数组的维度数目。dtype
属性:数组的元素类型。size
属性:数组的元素总数。例如,打印一个数组的形状和维度数目:
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape)
print(a.ndim)
输出:
(2, 3)
2
在NumPy中,可以对矩阵进行各种操作,包括矩阵的加、减、乘、转置等。
在NumPy中,使用+
和-
运算符可以对矩阵进行加减操作。要求加减的矩阵形状相同。
例如,创建两个相同形状的矩阵,进行加减操作:
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
c = a + b
d = a - b
print(c)
print(d)
输出:
[[ 6 8]
[10 12]]
[[-4 -4]
[-4 -4]]
在NumPy中,使用np.dot()
或@
运算符可以对矩阵进行乘法操作。要求第一个矩阵的列数和第二个矩阵的行数相同。
例如,创建两个矩阵,进行乘法操作:
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
c = np.dot(a, b)
d = a @ b
print(c)
print(d)
输出:
[[19 22]
[43 50]]
[[19 22]
[43 50]]
注意,这里的乘法是矩阵乘法,而不是元素逐个相乘。
在NumPy中,使用np.transpose()
或.T
属性可以对矩阵进行转置操作。
例如,创建一个矩阵,对其进行转置操作:
a = np.array([[1, 2], [3, 4]])
b = np.transpose(a)
c = a.T
print(b)
print(c)
输出:
[[1 3]
[2 4]]
[[1 3]
[2 4]]
NumPy中包含许多用于线性代数计算的工具。以下是其中一些常用的工具。
在NumPy中,使用np.linalg.inv()
方法可以求矩阵的逆。
例如,创建一个3x3的矩阵,对其求逆:
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.linalg.inv(a)
print(b)
输出:
[[-1.23333333e+16 2.46666667e+16 -1.23333333e+16]
[ 2.46666667e+16 -4.93333333e+16 2.46666667e+16]
[-1.23333333e+16 2.46666667e+16 -1.23333333e+16]]
注意,只有方阵才有逆矩阵,当矩阵不可逆时,会报错。
在NumPy中,使用np.linalg.eig()
方法可以求矩阵的特征值和特征向量。
例如,创建一个2x2的矩阵,对其求特征值和特征向量:
a = np.array([[1, 2], [2, 1]])
b, c = np.linalg.eig(a)
print(b)
print(c)
输出:
[ 3. -1.]
[[ 0.70710678 -0.70710678]
[ 0.70710678 0.70710678]]
注意,只有方阵才有特征值和特征向量。