当前位置:首页 > Python > 正文

NumPy库完全指南 - Python科学计算核心库教程 | Python数据分析

NumPy库完全指南

Python科学计算的核心库 - 高效多维数组操作与数值计算

什么是NumPy?

NumPy(Numerical Python)是Python科学计算的基础库,提供:

  • 强大的N维数组对象(ndarray)
  • 复杂的广播功能函数
  • 整合C/C++/Fortran代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

NumPy是SciPy、Pandas、Matplotlib、Scikit-learn等众多科学计算和机器学习库的基础。

为什么使用NumPy?

  • 高效的内存使用
  • 比原生Python列表快10-100倍
  • 简洁的数组操作语法
  • 丰富的科学计算函数
  • 与其他科学计算库无缝集成

核心概念

  • ndarray:N维数组对象
  • 向量化:对整个数组执行操作
  • 广播:不同形状数组间的运算规则
  • 索引与切片:访问数组元素
  • 通用函数(ufunc):元素级操作的函数

安装与基础使用

安装NumPy

pip install numpy

创建NumPy数组

import numpy as np

# 从Python列表创建数组
arr1 = np.array([1, 2, 3, 4, 5])

# 创建全零数组
zeros = np.zeros((3, 3))

# 创建全1数组
ones = np.ones((2, 4))

# 创建单位矩阵
identity = np.eye(3)

# 创建等差数列
range_arr = np.arange(0, 10, 2)  # [0, 2, 4, 6, 8]

# 创建随机数组
random_arr = np.random.rand(3, 2)

数组操作与计算

数组属性

arr = np.array([[1, 2, 3], [4, 5, 6]])

print("数组维度:", arr.ndim)       # 2
print("数组形状:", arr.shape)     # (2, 3)
print("元素总数:", arr.size)      # 6
print("数据类型:", arr.dtype)     # int64
print("元素大小:", arr.itemsize)  # 8

数组索引与切片

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

# 访问单个元素
print(arr[1, 2])  # 6

# 切片
print(arr[0:2, 1:3]) 
# [[2, 3]
#  [5, 6]]

# 布尔索引
mask = arr > 5
print(arr[mask])  # [6, 7, 8, 9]

数组运算

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 逐元素加法
print(a + b)  # [5, 7, 9]

# 逐元素乘法
print(a * b)  # [4, 10, 18]

# 矩阵乘法
matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])
print(np.dot(matrix_a, matrix_b))
# [[19, 22]
#  [43, 50]]

# 数学函数
print(np.sin(a))        # 正弦函数
print(np.sqrt(a))       # 平方根
print(np.exp(a))        # 指数函数
print(np.log(a))        # 自然对数

实际应用示例

数据分析 - 统计计算

# 生成随机数据
data = np.random.normal(loc=170, scale=10, size=1000)  # 1000个身高数据

# 基本统计量
print("平均值:", np.mean(data))
print("中位数:", np.median(data))
print("标准差:", np.std(data))
print("最小值:", np.min(data))
print("最大值:", np.max(data))

# 百分位数
print("25%分位数:", np.percentile(data, 25))
print("75%分位数:", np.percentile(data, 75))

图像处理

from PIL import Image
import matplotlib.pyplot as plt

# 加载图像并转换为NumPy数组
img = Image.open('image.jpg')
img_array = np.array(img)

# 显示原始图像
plt.imshow(img_array)
plt.title('原始图像')
plt.show()

# 将图像转换为灰度图
gray_img = np.dot(img_array[..., :3], [0.2989, 0.5870, 0.1140])
plt.imshow(gray_img, cmap='gray')
plt.title('灰度图像')
plt.show()

# 图像反转
inverted_img = 255 - img_array
plt.imshow(inverted_img)
plt.title('反转图像')
plt.show()

NumPy性能优势

向量求和

原生Python vs NumPy

10-100x

速度提升

内存效率

更紧凑的数据存储

4-8x

内存节省

开发效率

简洁的数组操作语法

5-10x

代码行数减少

总结

NumPy是Python科学计算生态系统的基石,提供:

  • 高效的多维数组数据结构
  • 强大的数值计算能力
  • 丰富的数学函数库
  • 与其他科学计算库的无缝集成

掌握NumPy是进行数据分析、机器学习、科学计算等领域的必备技能。其核心优势在于:

  1. 高性能的数组操作
  2. 简洁的向量化语法
  3. 广播机制简化多维运算
  4. 广泛的应用场景支持

学习建议: 实践是掌握NumPy的最佳方式。尝试将日常数据处理任务转换为NumPy操作,逐步熟悉其各种函数和技巧。

本教程仅用于NumPy学习目的 | 更多Python科学计算资源请访问官方文档

发表评论