Python数据分析与应用:科学计算库NumPy

引言

NumPy(Numerical Python)是Python科学计算的核心库,为高效处理多维数组和矩阵运算提供了强大的支持。无论是数据分析、机器学习还是信号处理,NumPy都是不可或缺的工具。本文将带你系统学习NumPy的核心功能,并通过实例演示其在科学计算中的应用。


一、NumPy数组基础

1.1 数组的概念

NumPy的核心是ndarray对象(N维数组),它具有以下特点:

  • 固定大小:数组创建后大小不可变。

  • 同构数据类型:所有元素类型必须一致。

  • 高效运算:支持矢量化操作,避免显式循环。

核心术语

  • 维度(Axis):数组的轴代表其维度。例如,二维数组有两个轴(行和列)。

  • 秩(Rank):数组的维度数。一维数组的秩为1,二维数组的秩为2。

import numpy as np

# 创建一维、二维、三维数组
arr1d = np.array([1, 2, 3])  
arr2d = np.array([[1, 2], [3, 4]])  
arr3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])


1.2 数组的创建

NumPy提供了多种创建数组的方法:

  1. 从列表/元组创建np.array()

  2. 全零数组np.zeros(shape)

  3. 全一数组np.ones(shape)

  4. 等差数组np.arange(start, end, step)

  5. 指定数据类型:通过dtype参数控制元素类型。

# 创建全零数组并指定类型
zero_arr = np.zeros((3, 3), dtype=np.int32)  

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


二、数组操作与运算

2.1 索引与切片

  • 一维数组:与Python列表语法一致。

  • 二维数组:通过[行索引, 列索引]访问元素。

  • 布尔索引:根据条件筛选元素。

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

# 获取第二行第一列的元素
print(arr[1, 0])  # 输出:4

# 布尔索引筛选大于3的元素
print(arr[arr > 3])  # 输出:[4 5 6]


2.2 广播机制

当不同形状的数组进行运算时,NumPy会自动触发广播机制(Broadcasting),将小数组扩展为兼容形状。

广播规则

  • 从右向左对齐维度。

  • 每个维度的大小要么相等,要么其中一个为1。

a = np.array([[1, 2], [3, 4]])  
b = np.array([10, 20])  

# 广播后,b被扩展为[[10, 20], [10, 20]]
print(a + b)  # 输出:[[11 22], [13 24]]


2.3 通用函数(UFunc)

NumPy提供大量数学函数,支持矢量化运算:

  • 一元函数:如np.sqrt()(平方根)、np.exp()(指数)。

  • 二元函数:如np.add()(加法)、np.multiply()(乘法)。

arr = np.array([1, 4, 9])

# 计算平方根
print(np.sqrt(arr))  # 输出:[1. 2. 3.]

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


三、高级操作

3.1 数组重塑与转置

  • 重塑reshape()改变数组形状,但总元素数不变。

  • 转置.T属性或transpose()方法交换轴顺序。

# 将一维数组重塑为3x2的二维数组
arr = np.arange(6).reshape(3, 2)  

# 转置数组
print(arr.T)  # 输出:[[0 2 4], [1 3 5]]


3.2 统计与逻辑运算

  • 统计函数:如np.sum()(求和)、np.mean()(均值)。

  • 条件逻辑np.where(condition, x, y)根据条件选择元素。

# 计算每列的最大值
arr = np.array([[1, 2], [3, 4]])  
print(np.max(arr, axis=0))  # 输出:[3 4]

# 条件替换
print(np.where(arr > 2, 10, 0))  # 输出:[[0 0], [10 10]]


四、实战案例:股票收益率计算

4.1 数据准备

假设某股票连续5天的收盘价为:[100, 102, 105, 103, 107]

prices = np.array([100, 102, 105, 103, 107])

4.2 计算简单收益率与对数收益率

# 简单收益率:(当前价格 - 前一日价格) / 前一日价格  
simple_returns = (prices[1:] - prices[:-1]) / prices[:-1]  

# 对数收益率:ln(当前价格 / 前一日价格)  
log_returns = np.log(prices[1:] / prices[:-1])


五、总结

NumPy通过高效的数组操作和丰富的数学函数,成为科学计算的基石。掌握其核心功能后,可大幅提升数据处理效率。无论是简单的统计分析,还是复杂的矩阵运算,NumPy都能提供优雅的解决方案。后续可结合Pandas、Matplotlib等库,构建完整的数据分析工作流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值