NumPy
是 Python 科学计算库中非常重要的库,主要用于处理大型多维数组和矩阵运算。它提供了大量数学函数来操作这些数组。NumPy
的核心是 ndarray
对象,该对象是一个多维数组,可以存储同类型的数据。
下面是 NumPy
的详细用法和功能介绍:
1. 导入NumPy
在使用 NumPy
之前,需要先导入库,通常我们会将 NumPy
以 np
作为别名:
import numpy as np
2. 创建数组
NumPy 中的数组称为 ndarray
,可以通过多种方式创建数组:
a) 使用 array()
创建数组
# 从Python列表创建数组
arr = np.array([1, 2, 3, 4])
print(arr) # 输出: [1 2 3 4]
# 创建多维数组
arr_2d = np.array([[1, 2], [3, 4]])
print(arr_2d) # 输出: [[1 2] [3 4]]
b) 使用 zeros()
、ones()
和 full()
创建特定值数组
# 创建一个全为0的数组
zeros_arr = np.zeros((2, 3))
print(zeros_arr) # 输出:[[0. 0. 0.] [0. 0. 0.]]
# 创建一个全为1的数组
ones_arr = np.ones((2, 3))
print(ones_arr) # 输出:[[1. 1. 1.] [1. 1. 1.]]
# 创建一个指定数值的数组
full_arr = np.full((2, 2), 5)
print(full_arr) # 输出:[[5 5] [5 5]]
c) 使用 arange()
和 linspace()
创建序列数组
# 创建一个等差序列数组
arr_range = np.arange(0, 10, 2)
print(arr_range) # 输出:[0 2 4 6 8]
# 创建一个线性间隔数组
arr_linspace = np.linspace(0, 1, 5)
print(arr_linspace) # 输出:[0. 0.25 0.5 0.75 1. ]
3. 数组属性
ndarray
对象具有多种属性,可以获取数组的信息:
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape) # 数组的形状 (2, 3)
print(arr.size) # 数组中的元素数量 6
print(arr.ndim) # 数组的维度 2
print(arr.dtype) # 数组元素的数据类型 int64
4. 数组索引和切片
NumPy
数组支持多维索引和切片操作。
a) 一维数组索引
arr = np.array([1, 2, 3, 4, 5])
print(arr[0]) # 输出第一个元素:1
print(arr[-1]) # 输出最后一个元素:5
b) 多维数组索引
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr_2d[0, 2]) # 输出第一行第三列的元素:3
print(arr_2d[1, -1]) # 输出第二行最后一个元素:6
c) 切片
# 一维数组切片
arr = np.array([1, 2, 3, 4, 5])
print(arr[1:4]) # 输出: [2 3 4]
# 多维数组切片
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr_2d[0:2, 1:3]) # 输出:[[2 3] [5 6]]
5. 数学运算
NumPy
可以对数组进行广播机制下的运算。
a) 数组的基本运算
arr = np.array([1, 2, 3])
print(arr + 2) # 输出:[3 4 5]
print(arr * 3) # 输出:[3 6 9]
print(arr ** 2) # 输出:[1 4 9]
b) 数组之间的运算
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print(arr1 + arr2) # 输出:[5 7 9]
print(arr1 * arr2) # 输出:[4 10 18]
c) 通用函数 (Universal Functions)
NumPy
提供了许多通用的数学函数,可以应用于数组的每个元素,例如 sin()
、exp()
、sqrt()
等。
arr = np.array([1, 2, 3])
print(np.sin(arr)) # 输出:数组每个元素的正弦值
print(np.exp(arr)) # 输出:数组每个元素的指数值
print(np.sqrt(arr)) # 输出:数组每个元素的平方根
6. 数组的形状操作
NumPy
提供了许多工具来改变数组的形状。
a) reshape()
改变数组形状
arr = np.array([[1, 2, 3], [4, 5, 6]])
reshaped_arr = arr.reshape((3, 2))
print(reshaped_arr)
# 输出:
# [[1 2]
# [3 4]
# [5 6]]
b) 数组转置
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.T)
# 输出:
# [[1 4]
# [2 5]
# [3 6]]
7. 数组的合并和分割
NumPy
支持对数组的合并和分割操作。
a) 数组的合并
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])
# 垂直合并
vstack_arr = np.vstack((arr1, arr2))
print(vstack_arr) # 输出:[[1 2] [3 4] [5 6]]
# 水平合并
hstack_arr = np.hstack((arr1, arr2.T))
print(hstack_arr) # 输出:[[1 2 5] [3 4 6]]
b) 数组的分割
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 垂直分割
vsplit_arr = np.vsplit(arr, 2)
print(vsplit_arr) # 输出两个2x3的数组
# 水平分割
hsplit_arr = np.hsplit(arr, 3)
print(hsplit_arr) # 输出三个2x1的数组
8. 布尔索引和条件过滤
NumPy 支持布尔条件筛选和索引操作。
arr = np.array([1, 2, 3, 4, 5])
print(arr[arr > 3]) # 输出:[4 5]
# 条件赋值
arr[arr > 3] = 0
print(arr) # 输出:[1 2 3 0 0]
9. 常用的统计函数
NumPy
提供了丰富的统计函数,方便对数组进行统计计算。
arr = np.array([1, 2, 3, 4, 5])
print(np.mean(arr)) # 平均值:3.0
print(np.sum(arr)) # 总和:15
print(np.std(arr)) # 标准差:1.414
print(np.min(arr)) # 最小值:1
print(np.max(arr)) # 最大值:5
10. 随机数生成
NumPy
的 random
模块提供了生成随机数的功能。
# 生成一个[0, 1)之间的随机浮点数
print(np.random.rand())
# 生成一个服从标准正态分布的随机数
print(np.random.randn())
# 生成一个指定范围内的随机整数
print(np.random.randint(0, 10, (3, 3))) # 输出一个3x3的随机整数矩阵
11. 广播机制
NumPy
具有广播(broadcasting)机制,允许在不同形状的数组之间执行算术运算。
arr