NumPy教程:Python科学计算基础 - 从入门到精通

NumPy是Python科学计算的基础库,提供了高性能的多维数组对象和各种派生工具。本教程将全面介绍NumPy的核心功能和实际应用。

一、NumPy基础

1.1 数组创建

import numpy as np

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

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

# 创建特殊数组
zeros = np.zeros((3, 4))  # 全0数组
ones = np.ones((2, 3))    # 全1数组
eye = np.eye(3)          # 单位矩阵
random = np.random.rand(2, 2)  # 随机数组

1.2 数组属性和方法

# 数组属性
print("维度:", arr2.ndim)
print("形状:", arr2.shape)
print("数据类型:", arr2.dtype)
print("元素个数:", arr2.size)

# 数组变形
reshaped = arr1.reshape(5, 1)  # 改变形状
flattened = arr2.flatten()      # 展平数组
transposed = arr2.T            # 转置

二、数组操作

2.1 索引和切片

# 一维数组索引
print(arr1[0])      # 第一个元素
print(arr1[-1])     # 最后一个元素
print(arr1[1:4])    # 切片

# 二维数组索引
print(arr2[0, 1])   # 第一行第二列
print(arr2[:, 1])   # 第二列所有元素
print(arr2[0:2, 1:3])  # 区块选择

2.2 数组运算

# 基本运算
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])

print("加法:", x + y)
print("减法:", x - y)
print("乘法:", x * y)  # 元素级乘法
print("除法:", x / y)
print("幂运算:", x ** 2)

# 统计运算
print("平均值:", x.mean())
print("最大值:", x.max())
print("最小值:", x.min())
print("标准差:", x.std())
print("求和:", x.sum())

三、高级特性

3.1 广播机制

# 广播示例
arr = np.array([[1, 2, 3], [4, 5, 6]])
scalar = 2

# 数组与标量运算
print("数组 * 标量:\n", arr * scalar)

# 不同形状数组运算
x = np.array([[1], [2], [3]])
y = np.array([4, 5, 6])
print("广播结果:\n", x + y)

3.2 矩阵运算

# 矩阵乘法
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

print("矩阵乘法:\n", np.dot(a, b))
# 或使用 @
print("矩阵乘法(@):\n", a @ b)

# 线性代数运算
print("行列式:", np.linalg.det(a))
print("逆矩阵:\n", np.linalg.inv(a))
print("特征值:", np.linalg.eigvals(a))

3.3 数组操作进阶

# 数组拼接
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

print("水平拼接:", np.hstack((arr1, arr2)))
print("垂直拼接:\n", np.vstack((arr1, arr2)))

# 数组分割
arr = np.array([1, 2, 3, 4, 5, 6])
print("数组分割:", np.split(arr, 3))

# 条件筛选
arr = np.array([1, 2, 3, 4, 5, 6])
mask = arr > 3
print("条件筛选:", arr[mask])

四、实际应用

4.1 图像处理

# 读取和处理图像
from PIL import Image

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

# 图像操作
rotated = np.rot90(img_array)  # 旋转90度
flipped = np.fliplr(img_array)  # 水平翻转

4.2 数据分析

# 生成示例数据
data = np.random.normal(0, 1, 1000)

# 统计分析
print("均值:", np.mean(data))
print("中位数:", np.median(data))
print("标准差:", np.std(data))
print("方差:", np.var(data))

# 直方图统计
histogram, bins = np.histogram(data, bins=30)

五、性能优化

5.1 向量化操作

# 避免使用循环的向量化操作
# 低效的循环方式
def slow_function(x):
    result = np.zeros_like(x)
    for i in range(len(x)):
        result[i] = x[i] ** 2
    return result

# 高效的向量化方式
def fast_function(x):
    return x ** 2

# 性能对比
x = np.array([1, 2, 3, 4, 5])

5.2 内存优化

# 使用适当的数据类型
int_array = np.array([1, 2, 3], dtype=np.int32)
float_array = np.array([1.0, 2.0, 3.0], dtype=np.float32)

# 使用视图而不是复制
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.view()  # 创建视图
c = a.copy()  # 创建副本

总结

NumPy的主要优势:

  • 高效的多维数组操作
  • 强大的数学函数库
  • 广播机制简化计算
  • 与其他科学计算库良好集成
  • 优秀的性能表现

使用建议:

  • 熟练掌握数组操作基础
  • 理解并善用广播机制
  • 注意内存使用效率
  • 尽量使用向量化操作
  • 经常查阅官方文档获取最新特性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老大白菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值