NumPy(Numerical Python)是 Python 科学计算的基础库,提供高效的数组操作功能。下面是 NumPy 常用方法的详细说明及示例,帮助你快速掌握这项技能。
1. 安装和导入 NumPy
安装 NumPy:
pip install numpy
导入 NumPy:
import numpy as np
2. 数组创建方法
1D 数组
array = np.array([1, 2, 3, 4])
print(array) # 输出: [1 2 3 4]
多维数组
array_2d = np.array([[1, 2], [3, 4]])
print(array_2d)
# 输出:
# [[1 2]
# [3 4]]
特殊数组
# 全零数组
zeros = np.zeros((2, 3))
print(zeros)
# 输出:
# [[0. 0. 0.]
# [0. 0. 0.]]
# 全一数组
ones = np.ones((3, 2))
print(ones)
# 输出:
# [[1. 1.]
# [1. 1.]
# [1. 1.]]
# 单位矩阵
identity = np.eye(3)
print(identity)
# 输出:
# [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]
# 随机数组
random_array = np.random.random((2, 2))
print(random_array)
# 输出:
# [[0.86350558 0.21282662]
# [0.54667975 0.58941621]]
等差数组
# 从 0 到 10,步长为 2
arange_array = np.arange(0, 10, 2)
print(arange_array)
# 输出: [0 2 4 6 8]
# 从 0 到 1,分成 5 段
linspace_array = np.linspace(0, 1, 5)
print(linspace_array)
# 输出: [0. 0.25 0.5 0.75 1. ]
3. 数组属性和操作
数组属性
array = np.array([[1, 2, 3], [4, 5, 6]])
print("维度:", array.ndim) # 输出: 2
print("形状:", array.shape) # 输出: (2, 3)
print("元素个数:", array.size) # 输出: 6
print("数据类型:", array.dtype) # 输出: int32 或 int64
数组变形
reshaped = array.reshape((3, 2))
print(reshaped)
# 输出:
# [[1 2]
# [3 4]
# [5 6]]
数组转置
transposed = array.T
print(transposed)
# 输出:
# [[1 4]
# [2 5]
# [3 6]]
4. 基本运算
元素运算
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print("加法:", a + b) # [5 7 9]
print("乘法:", a * b) # [4 10 18]
print("指数:", np.exp(a)) # [ 2.71828183 7.3890561 20.08553692]
矩阵运算
a = np.array([[1, 2], [3, 4]])
b = np.array([[2, 0], [1, 3]])
# 点积
dot_product = np.dot(a, b)
print(dot_product)
# 输出:
# [[ 4 4]
# [10 12]]
# 矩阵乘法
matrix_mult = a @ b
print(matrix_mult)
# 输出:
# [[ 4 4]
# [10 12]]
统计运算
array = np.array([[1, 2, 3], [4, 5, 6]])
print("总和:", np.sum(array)) # 21
print("均值:", np.mean(array)) # 3.5
print("最大值:", np.max(array)) # 6
print("最小值:", np.min(array)) # 1
print("按列求和:", np.sum(array, axis=0)) # [5 7 9]
5. 数组索引与切片
基础索引
array = np.array([10, 20, 30, 40])
print(array[1]) # 20
print(array[-1]) # 40
切片操作
array = np.array([10, 20, 30, 40])
print(array[1:3]) # [20 30]
print(array[:2]) # [10 20]
布尔索引
array = np.array([1, 2, 3, 4, 5])
# 筛选大于2的元素
print(array[array > 2]) # [3 4 5]
花式索引
array = np.array([10, 20, 30, 40, 50])
print(array[[0, 2, 4]]) # [10 30 50]
6. 广播机制
广播机制让数组形状不同但兼容的情况下完成运算。
a = np.array([1, 2, 3])
b = np.array([[1], [2], [3]])
result = a + b
print(result)
# 输出:
# [[2 3 4]
# [3 4 5]
# [4 5 6]]
7. 实用功能
随机数生成
np.random.seed(42) # 设置随机种子
random_numbers = np.random.rand(3) # 生成 3 个随机数
print(random_numbers)
# 输出: [0.12345678 0.98765432 0.54321098]
排序
array = np.array([3, 1, 4, 1, 5])
sorted_array = np.sort(array)
print(sorted_array) # [1 1 3 4 5]
重复与拼接
a = np.array([1, 2, 3])
# 重复
repeated = np.tile(a, (2, 3))
print(repeated)
# 输出:
# [[1 2 3 1 2 3 1 2 3]
# [1 2 3 1 2 3 1 2 3]]
# 拼接
b = np.array([4, 5, 6])
concatenated = np.concatenate((a, b))
print(concatenated)
# 输出: [1 2 3 4 5 6]
8. 实战案例:简单的线性回归
# 导入库
import numpy as np
from sklearn.linear_model import LinearRegression
# 数据
X = np.array([[1], [2], [3]])
y = np.array([2, 4, 6])
# 模型训练
model = LinearRegression()
model.fit(X, y)
# 预测
predicted = model.predict(np.array([[4]]))
print("预测值:", predicted[0]) # 预测值: 7.999999999999998
总结
NumPy 提供了高效、灵活的数组操作功能,无论是数据预处理、数学运算,还是构建机器学习模型,都是一个不可或缺的工具。希望通过本教程,你能熟练掌握 NumPy 的常用方法,进而为复杂数据分析任务打下基础。