13 NumPy 基本运算教程

13 NumPy 基本运算教程

NumPy是一个强大的科学计算库,特别是在处理数组和矩阵运算时。下面将介绍NumPy中的一些基本运算,并通过实例加以说明。

创建NumPy数组

首先,我们需要导入NumPy库并创建数组。一维数组和二维数组是最常见的。

1
2
3
4
5
6
7
8
9
import numpy as np

# 一维数组
array_1d = np.array([1, 2, 3, 4])
print("一维数组:", array_1d)

# 二维数组
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
print("二维数组:\n", array_2d)

数组的基本运算

1. 数组运算

NumPy支持数组之间的基本运算,如加、减、乘、除等。运算会对数组中的每一个元素进行,称为“逐元素运算”。

加法

1
2
3
4
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
result_add = a + b
print("数组加法结果:", result_add) # 输出: [5 7 9]

减法

1
2
result_sub = b - a
print("数组减法结果:", result_sub) # 输出: [3 3 3]

乘法

1
2
result_mul = a * b
print("数组乘法结果:", result_mul) # 输出: [4 10 18]

除法

1
2
result_div = b / a
print("数组除法结果:", result_div) # 输出: [4. 2.5 2. ]

2. 标量运算

NumPy数组还可以与标量进行运算,所有元素都会参与运算。

1
2
3
4
5
6
7
8
9
c = np.array([1, 2, 3])

# 加法
result_scalar_add = c + 10
print("标量加法结果:", result_scalar_add) # 输出: [11 12 13]

# 乘法
result_scalar_mul = c * 2
print("标量乘法结果:", result_scalar_mul) # 输出: [2 4 6]

3. 数组的通用函数

NumPy提供了许多内置的通用函数(ufunc),可用于执行更复杂的运算。

取平方根

1
2
3
a = np.array([1, 4, 9, 16])
result_sqrt = np.sqrt(a)
print("平方根结果:", result_sqrt) # 输出: [1. 2. 3. 4.]

指数运算

1
2
result_exp = np.exp(a)
print("指数运算结果:", result_exp) # 输出: [2.71828183e+00 5.45981500e+01 8.10308393e+03 8.88611052e+06]

4. 聚合函数

NumPy还提供了许多聚合函数来处理数组,比如求和、平均值、最大值等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
d = np.array([1, 2, 3, 4, 5])

# 求和
sum_result = np.sum(d)
print("数组求和结果:", sum_result) # 输出: 15

# 平均值
mean_result = np.mean(d)
print("数组平均值:", mean_result) # 输出: 3.0

# 最大值
max_result = np.max(d)
print("数组最大值:", max_result) # 输出: 5

# 最小值
min_result = np.min(d)
print("数组最小值:", min_result) # 输出: 1

总结

通过上述例子,我们可以看到NumPy在数据处理方面提供的强大功能。无论是基本的数组运算还是复杂的数学函数,NumPy都能轻松实现。通过掌握这些基本运算,你将能够高效地进行各类科学计算和数据分析。

14 NumPy 统计函数基础

14 NumPy 统计函数基础

NumPy 提供了强大的统计函数,可以帮助我们对数组进行多种统计分析。本文将介绍几个常用的统计函数,并结合具体案例进行讲解。

1. 平均值 mean()

mean() 函数用于计算数组元素的平均值。

示例

1
2
3
4
5
import numpy as np

data = np.array([1, 2, 3, 4, 5])
mean_value = np.mean(data)
print("平均值:", mean_value)

输出结果:

1
平均值: 3.0

详细说明

在上述示例中,通过 np.mean(data) 计算了数组 data 中所有元素的平均值。mean() 函数默认计算所有元素的平均值,也可以通过参数 axis 指定计算的维度。

2. 中位数 median()

median() 函数用于计算数组的中位数。

示例

1
2
3
data = np.array([1, 3, 2, 5, 4])
median_value = np.median(data)
print("中位数:", median_value)

输出结果:

1
中位数: 3.0

详细说明

在这个例子中,np.median(data) 计算了数组 data 的中位数。中位数是将数据排列后位于中间的值,能够有效反映数据的中心趋势,特别是在存在极端值时。

3. 众数 mode()

NumPy 本身不直接提供众数的计算,但我们可以使用 scipy 库中的 mode() 函数。

示例

1
2
3
4
5
from scipy import stats

data = np.array([1, 2, 2, 3, 4, 4, 4, 5])
mode_value = stats.mode(data)
print("众数:", mode_value.mode[0], "出现次数:", mode_value.count[0])

输出结果:

1
众数: 4 出现次数: 3

详细说明

通过使用 scipy.stats.mode(),我们可以获取数组中的众数及其出现次数。在这个示例中,24 都是众数,但 4 出现的次数最多。

4. 方差 var()

var() 函数用于计算数组元素的方差,反映数据的离散程度。

示例

1
2
3
data = np.array([1, 2, 3, 4, 5])
variance_value = np.var(data)
print("方差:", variance_value)

输出结果:

1
方差: 2.0

详细说明

在这个例子中,np.var(data) 计算了数组 data 的方差。方差越大,说明数据分布越分散;方差越小,说明数据分布越集中。

5. 标准差 std()

std() 函数用于计算数组元素的标准差,是方差的平方根。

示例

1
2
3
data = np.array([1, 2, 3, 4, 5])
std_dev_value = np.std(data)
print("标准差:", std_dev_value)

输出结果:

1
标准差: 1.4142135623730951

详细说明

np.std(data) 计算了数组 data 的标准差。标准差是用来衡量数据离均值的距离,标准差越小,说明数据越集中。

6. 最大值与最小值 max()min()

max() 函数用于找到数组中的最大值,而 min() 则用于找到最小值。

示例

1
2
3
4
5
data = np.array([1, 2, 3, 4, 5])
max_value = np.max(data)
min_value = np.min(data)
print("最大值:", max_value)
print("最小值:", min_value)

输出结果:

1
2
最大值: 5
最小值: 1

详细说明

在上述示例中,np.max(data)np.min(data) 分别返回数组 data 的最大值和最小值。这些函数在数据分析中常常用于快速评估数据范围。

总结

NumPy 提供了丰富的统计函数,使得我们可以方便地对数据进行各种统计分析。利用这些函数,数据科学家和分析师可以深入了解数据的分布和特性,提高数据分析的效率和准确性。

15 NumPy线性代数基础教程

15 NumPy线性代数基础教程

NumPy是Python的一个开源数值计算库,广泛用于数据科学和机器学习等领域。它提供了高效的数组操作和线性代数功能。本节将介绍NumPy在线性代数中的基本用法,包括矩阵操作、向量运算等。

1. 创建数组

在NumPy中,线性代数操作的核心是ndarray对象。可以使用numpy.array()numpy.zeros()numpy.ones()等函数创建数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import numpy as np

# 创建一维数组
vector = np.array([1, 2, 3])
print("一维数组:", vector)

# 创建二维数组(矩阵)
matrix = np.array([[1, 2], [3, 4]])
print("二维数组:\n", matrix)

# 创建全零数组
zeros_matrix = np.zeros((2, 3))
print("全零矩阵:\n", zeros_matrix)

# 创建全一数组
ones_matrix = np.ones((2, 3))
print("全一矩阵:\n", ones_matrix)

2. 基本运算

NumPy支持多种基础的数组运算,包括加法、减法、乘法和除法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建两个数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 数组加法
sum_result = a + b
print("数组加法:", sum_result)

# 数组乘法(元素乘法)
product_result = a * b
print("数组乘法:", product_result)

# 数组除法
division_result = b / a
print("数组除法:", division_result)

3. 矩阵乘法

与元素乘法不同,矩阵乘法需要使用np.dot()或者@操作符。

1
2
3
4
5
6
7
8
9
10
11
# 创建两个矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# 矩阵乘法
matrix_product = np.dot(A, B)
print("矩阵乘法结果:\n", matrix_product)

# 使用@操作符
matrix_product_at = A @ B
print("矩阵乘法结果(使用@):\n", matrix_product_at)

4. 转置矩阵

可以使用.T属性快速获取矩阵的转置。

1
2
3
4
5
6
7
# 原始矩阵
C = np.array([[1, 2, 3], [4, 5, 6]])
print("原矩阵:\n", C)

# 矩阵转置
C_transposed = C.T
print("转置矩阵:\n", C_transposed)

5. 计算行列式与逆矩阵

NumPy提供了计算行列式和逆矩阵的功能。

1
2
3
4
5
6
7
8
9
10
# 创建一个可逆矩阵
D = np.array([[1, 2], [3, 4]])

# 计算行列式
determinant = np.linalg.det(D)
print("行列式:", determinant)

# 计算逆矩阵
inverse_matrix = np.linalg.inv(D)
print("逆矩阵:\n", inverse_matrix)

6. 特征值与特征向量

通过np.linalg.eig()函数,我们可以计算一个方阵的特征值和特征向量。

1
2
3
4
5
6
7
# 创建一个方阵
E = np.array([[4, 2], [1, 3]])

# 计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(E)
print("特征值:", eigenvalues)
print("特征向量:\n", eigenvectors)

7. 线性方程组的求解

我们可以使用np.linalg.solve()函数来解决线性方程组。

1
2
3
4
5
6
7
# 定义系数矩阵A和常数向量b
A = np.array([[3, 2], [1, 2]])
b = np.array([5, 4])

# 求解线性方程组 Ax = b
solution = np.linalg.solve(A, b)
print("线性方程组的解:", solution)

总结

本节介绍了使用NumPy进行基本线性代数运算的基本技巧,包括如何创建数组、执行基本运算、进行矩阵乘法、计算转置、求行列式和逆矩阵,以及求解线性方程组。通过大量实例,可以看到NumPy在数值计算中的强大功能和灵活性。希望本教程帮助你对NumPy的线性代数能力有一个清晰的认识。