1 NumPy 简介

NumPy 是 Python 中用于科学计算的一个基础包。它提供了一个高性能的多维数组对象,以及用于处理数组的工具。

1.1 导入 NumPy

首先,我们需要导入 NumPy 包,并按照惯例将其重命名为 np 以便于使用。

1
import numpy as np

1.2 创建数组

NumPy 提供了多种创建数组的方法。

  • 通过列表创建:

    1
    2
    n1 = np.array([1, 2, 3, 4])
    print("一维数组:", n1)
  • 通过 range 创建:

    1
    2
    n2 = np.array(range(0, 8))# 创建一个包含0到7的整数的数组
    print("使用 range 创建的一维数组:", n2)
  • 通过 arange 创建特定范围内的数组:

    1
    2
    arr2 = np.arange(1, 16, 2)  # 创建一个包含1到15之间奇数的数组,步长为2
    print("奇数组:", arr2)
  • 通过随机数生成器创建数组:

    1
    2
    fn1 = np.array([random.random() for _ in range(10)])
    print("包含10个随机浮点数的数组:", fn1)

1.3 处理多维数据

NumPy 非常擅长处理多维数据。

1
2
3
4
5
6
7
8
9
# 创建不同维度的数组
dn1 = np.array([1, 2, 3]) # 一维数组
dn2 = np.array([[1, 2, 3], [2, 3, 4]]) # 二维数组
dn3 = np.array([[[1, 2], [2, 3]], [[2, 3], [3, 4]]]) # 三维数组
dn4 = np.array([[[[1, 2], [2, 3]], [[2, 3], [3, 4]]],
[[[2, 3], [3, 4]], [[3, 4], [4, 5]]]]) # 四维数组

# 查看数组的形状
print("dn3 的形状:", dn3.shape)

1.4 数组的变形

我们可以改变数组的形状而不改变其数据。

1
2
3
4
5
6
7
8
9
10
dn3_1 = dn3.flatten()  # 平铺成一维数组
print("平铺后的 dn3:", dn3_1)

# 改变形状
dn3_1_3 = dn3_1.reshape((2, 2, 2), order='F') # 升维
print("升维后的 dn3_1_3:\n", dn3_1_3)

# 降维示例
dn4_2 = dn4.reshape((2, 8), order='F')
print("降维后的 dn4_2:\n", dn4_2)

2 基本矩阵操作

2.1 . 矩阵转置

转置是将矩阵的行和列互换的操作。

1
2
3
matrix_at = matrix_a.T
print("Transpose of Matrix A:")
print(matrix_at)

2.2 . 矩阵乘法

矩阵乘法分为两种形式:

  • 矩阵乘法:两个矩阵相乘,得到一个新的矩阵。
  • 向量点乘:两个向量相乘,得到一个标量。
1
2
3
4
5
6
7
8
#点乘
import numpy as np

matrix1 = np.arange(16).reshape(4,4)

print("\nmatrix1*matrix1:\n",matrix1*matrix1)#对应相乘
print("\nmatrix1[0]*matrix1:\n",matrix1[0]*matrix1)#加等元素行即纵向遍历相乘
print("\nmatrix1[:,0].reshape(4,1)*matrix1\n",matrix1[:,0].reshape(4,1)*matrix1)#加等元素列即横向遍历相乘
1
2
3
4
5
6
7
8
#叉乘
# 创建另一个 3x3 矩阵
matrix_b = np.array([[10, 11, 12], [13, 14, 15], [16, 17, 18]])

# 矩阵乘法
matrix_ab = np.dot(matrix_a, matrix_b)
print("Matrix Multiplication A * B:")
print(matrix_ab)

2.3 . 矩阵加法和减法

两个相同维度的矩阵可以直接相加或相减。

1
2
3
4
5
6
7
matrix_sum = matrix_a + matrix_b
print("Matrix Addition A + B:")
print(matrix_sum)

matrix_diff = matrix_a - matrix_b
print("Matrix Subtraction A - B:")
print(matrix_diff)

2.4 . 矩阵的逆

如果一个矩阵是可逆的,那么可以计算它的逆矩阵。

1
2
3
4
5
6
try:
matrix_a_inv = np.linalg.inv(matrix_a)
print("Inverse of Matrix A:")
print(matrix_a_inv)
except np.linalg.LinAlgError:
print("Matrix A is singular and cannot be inverted.")

2.5 . 矩阵行列式

矩阵的行列式对于了解矩阵是否可逆非常重要。

1
2
3
det_a = np.linalg.det(matrix_a)
print("Determinant of Matrix A:")
print(det_a)

2.6 . 特征值与特征向量

对于方阵来说,可以计算其特征值和对应的特征向量。

1
2
3
4
5
eigenvalues, eigenvectors = np.linalg.eig(matrix_a)
print("Eigenvalues of Matrix A:")
print(eigenvalues)
print("Eigenvectors of Matrix A:")
print(eigenvectors)

2.7 . 矩阵的秩

矩阵的秩定义为矩阵中线性无关的行或列的最大数目。

1
2
3
rank_a = np.linalg.matrix_rank(matrix_a)
print("Rank of Matrix A:")
print(rank_a)

2.8 . 矩阵的迹

矩阵的迹是主对角线上元素的和。

1
2
3
trace_a = np.trace(matrix_a)
print("Trace of Matrix A:")
print(trace_a)