NumPy
是 Python 中用于科学计算的核心库,它提供了强大的多维数组对象(ndarray
),以及用于处理这些数组的大量函数。
NumPy
的高效性和灵活性使其成为数据分析、机器学习和其他科学计算任务的基础工具。
首先,你需要安装 NumPy
包。可以通过 pip 来安装:
bashpip install numpy
以下是一些具体的示例,展示了如何使用 NumPy
进行基本的数组操作和一些高级功能。
你可以通过多种方式创建 NumPy
数组:
pythonimport numpy as np
# 从列表创建一维数组
a = np.array([1, 2, 3])
print(a)
# 从列表创建二维数组
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b)
# 使用 arange 函数创建数组
c = np.arange(10)
print(c)
# 使用 linspace 函数创建等间距数组
d = np.linspace(0, 1, 5) # 在 0 到 1 之间生成 5 个等间距的数
print(d)
# 创建全为零的数组
e = np.zeros((3, 3))
print(e)
# 创建全为一的数组
f = np.ones((3, 3))
print(f)
# 创建对角矩阵
g = np.eye(3)
print(g)
# 创建随机数数组
h = np.random.rand(3, 3)
print(h)
NumPy
提供了丰富的数组操作方法:
pythonimport numpy as np
# 创建两个数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 加法
print(a + b) # [5 7 9]
# 减法
print(a - b) # [-3 -3 -3]
# 乘法(元素级)
print(a * b) # [4 10 18]
# 点积
print(np.dot(a, b)) # 32
# 转置
c = np.array([[1, 2], [3, 4]])
print(c.T) # [[1 3] [2 4]]
# 形状操作
print(c.shape) # (2, 2)
print(c.reshape(1, 4)) # [[1 2 3 4]]
NumPy
支持灵活的索引和切片操作:
pythonimport numpy as np
# 创建一个二维数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 索引单个元素
print(a[0, 0]) # 1
# 索引一行
print(a[0]) # [1 2 3]
# 切片操作
print(a[0:2, 1:3]) # [[2 3] [5 6]]
# 条件索引
print(a[a > 5]) # [6 7 8 9]
NumPy
提供了许多统计函数来帮助分析数据:
pythonimport numpy as np
# 创建一个数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 求和
print(np.sum(a)) # 45
# 按列求和
print(np.sum(a, axis=0)) # [12 15 18]
# 按行求和
print(np.sum(a, axis=1)) # [6 15 24]
# 平均值
print(np.mean(a)) # 5.0
# 最大值和最小值
print(np.max(a)) # 9
print(np.min(a)) # 1
# 标准差
print(np.std(a)) # 2.581988897471611
NumPy
的广播机制允许不同形状的数组进行算术运算:
pythonimport numpy as np
# 创建一个二维数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 创建一个一维数组
b = np.array([1, 0, 1])
# 广播加法
print(a + b)
# [[2 2 4]
# [5 5 7]
# [8 8 10]]
NumPy
支持布尔索引和整数数组索引:
pythonimport numpy as np
# 创建一个数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 布尔索引
print(a[a > 5]) # [6 7 8 9]
# 整数数组索引
indices = np.array([0, 2, 1])
print(a[indices]) # [[1 2 3] [7 8 9] [4 5 6]]
NumPy
提供了多种方法来拼接和分割数组:
pythonimport numpy as np
# 创建两个数组
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
# 水平拼接
print(np.hstack((a, b)))
# [[1 2 5 6]
# [3 4 0 0]]
# 垂直拼接
print(np.vstack((a, b)))
# [[1 2]
# [3 4]
# [5 6]]
# 分割数组
c = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
print(np.hsplit(c, 2)) # 将 c 水平分成两部分
# [array([[1, 2],
# [5, 6]]),
# array([[3, 4],
# [7, 8]])]
print(np.vsplit(c, 2)) # 将 c 垂直分成两部分
# [array([[1, 2, 3, 4]]),
# array([[5, 6, 7, 8]])]
NumPy
提供了方便的方法来保存和加载数组:
pythonimport numpy as np
# 创建一个数组
a = np.array([[1, 2, 3], [4, 5, 6]])
# 保存到文件
np.save('array.npy', a)
# 从文件加载
b = np.load('array.npy')
print(b)
NumPy
提供了丰富的线性代数功能:
pythonimport numpy as np
# 创建两个矩阵
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
# 矩阵乘法
print(np.dot(a, b))
# [[19 22]
# [43 50]]
# 计算行列式
print(np.linalg.det(a)) # -2.0
# 计算逆矩阵
print(np.linalg.inv(a))
# [[-2. 1. ]
# [ 1.5 -0.5]]