📜  NumPy线性代数(1)

📅  最后修改于: 2023-12-03 14:44:49.703000             🧑  作者: Mango

NumPy线性代数

NumPy(Numerical Python)是一个针对数值计算的Python库,它为Python提供了高效的多维数组(ndarray)操作支持,以及用于处理这些数组的基本数学函数。NumPy也包括一些线性代数工具,这些工具可以用于各种数值线性代数计算。本文将介绍NumPy线性代数的基本使用方法。

安装NumPy

使用NumPy之前,需要先安装它。可以使用pip来安装它:

pip install numpy
导入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]]

注意,只有方阵才有特征值和特征向量。