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

第十四章:数据分析基础库NumPy(一)

数据分析基础库 NumPy

请添加图片描述
在这里插入图片描述


文章目录

  • 数据分析基础库 NumPy
    • 一、引言
    • 二、NumPy 基础与 ndarray 介绍
      • 2.1 NumPy 简介与安装
      • 2.2 ndarray 对象介绍
    • 三、ndarray 的创建方法
      • 3.1 从 Python 数据结构创建
      • 3.2 基于数值范围生成
      • 3.3 预定义形状填充
      • 3.4 特殊矩阵生成
      • 3.5 随机数组生成
    • 四、ndarray 的基本属性
      • 4.1 形状相关属性
      • 4.2 数据类型相关属性
      • 4.3 数组转换与重塑


一、引言

NumPy(Numerical Python)是 Python 科学计算的基础库,为 Python 提供了高性能的多维数组对象和大量数学函数,是进行数据分析、机器学习和科学计算的基石。

学习目标

  • 理解 NumPy 数组(ndarray)的优势和应用场景

  • 掌握 ndarray 的创建方法和基本属性

  • 熟练使用数组进行基本运算和高级操作

  • 掌握数组的索引与切片技术

  • 应用常用统计函数进行数据分析

课程重点

  • ndarray 的高效存储和快速运算特性

  • 不同类型数组的创建方法

  • 数组的基本运算和矩阵运算

  • 数组的索引与切片操作

  • 常用统计函数的应用

二、NumPy 基础与 ndarray 介绍

2.1 NumPy 简介与安装

NumPy 是 Python 的一个开源数值计算扩展库,专为处理大型多维数组和矩阵数据而设计。它提供了高效的存储结构和运算函数,使得数值计算变得简洁而快速。

NumPy 的核心优势

  • 高效的存储方式,节省内存空间

  • 向量化运算,避免显式循环,提高执行速度

  • 丰富的数学函数库,支持各种科学计算

  • 与其他科学计算库(如 SciPy、Pandas)无缝集成

安装 NumPy

# 使用pip安装
pip install numpy# 验证安装
python -c "import numpy; print(numpy.__version__)"

导入 NumPy

import numpy as np  # 习惯上使用np作为别名

2.2 ndarray 对象介绍

ndarray(N-dimensional array)是 NumPy 的核心数据结构,代表一个多维的数组对象。与 Python 列表不同,ndarray 中的所有元素必须是相同类型的数据,这使得 ndarray 在存储和运算上更加高效。

ndarray 与 Python 列表的对比

特性ndarrayPython 列表
存储效率高,元素类型相同低,元素类型可不同
运算速度极快,向量化操作较慢,需显式循环
内存布局连续存储分散存储
数学运算直接支持元素级运算需借助第三方库或循环实现

操作演示 1:ndarray 与列表运算速度对比

假设我们需要计算两个包含 1000000 个元素的数组的和,分别使用 ndarray 和列表实现:

import numpy as np
import time# 使用ndarray
arr_np = np.arange(1000000)
start = time.time()
result_np = arr_np + arr_np
print("ndarray运算时间:", time.time() - start)  # 约0.0001秒# 使用列表
list_py = list(range(1000000))
start = time.time()
result_list = [x + y for x, y in zip(list_py, list_py)]
print("列表运算时间:", time.time() - start)  # 约0.08秒

输出结果

ndarray运算时间: 0.000123456列表运算时间: 0.087654321

从结果可以看出,ndarray 的运算速度比列表快约 700 倍!这正是 NumPy 在科学计算中广泛应用的主要原因之一。

三、ndarray 的创建方法

3.1 从 Python 数据结构创建

创建 ndarray 最直接的方法是使用np.array()函数,将 Python 列表、元组等序列类型转换为 ndarray。

基本语法

np.array(object, dtype=None)

示例 1:创建一维数组

# 从列表创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])
print("一维数组:", arr1)
print("数组类型:", type(arr1))  # 输出:<class 'numpy.ndarray'>

示例 2:创建二维数组

# 从嵌套列表创建二维数组
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
print("二维数组:")
print(arr2d)

示例 3:指定数据类型

# 创建浮点型数组
arr_float = np.array([1, 2, 3], dtype=np.float32)
print("浮点型数组:", arr_float)
print("数据类型:", arr_float.dtype)  # 输出:float32

3.2 基于数值范围生成

NumPy 提供了多种基于数值范围生成数组的方法,适用于生成规则序列。

常用函数

函数功能示例
np.arange()创建等差数组np.arange(0, 10, 2) → [0, 2, 4, 6, 8]
np.linspace()创建等分数组np.linspace(0, 1, 5) → [0.0, 0.25, 0.5, 0.75, 1.0]
np.logspace()创建对数等分数组np.logspace(0, 2, 3) → [1.0, 10.0, 100.0]

示例 1:使用 arange 创建等差数组

# 创建从0到10(不包含10),步长为2的数组
arr_arange = np.arange(0, 10, 2)
print("arange生成的数组:", arr_arange)

示例 2:使用 linspace 创建等分数组

# 创建从0到1,包含5个等间距数值的数组
arr_linspace = np.linspace(0, 1, 5)
print("linspace生成的数组:", arr_linspace)

示例 3:使用 logspace 创建对数等分数组

# 创建从10^0到10^2,包含3个等比数值的数组
arr_logspace = np.logspace(0, 2, 3)
print("logspace生成的数组:", arr_logspace)

3.3 预定义形状填充

NumPy 提供了一系列函数,可以快速创建具有特定形状和初始值的数组,适用于初始化操作。

常用函数

函数功能示例
np.zeros()创建全零数组np.zeros((3, 4)) → 3x4 全零数组
np.ones()创建全一数组np.ones((2, 5)) → 2x5 全一数组
np.full()创建填充指定值的数组np.full((3, 3), 5) → 3x3 全 5 数组
np.empty()创建未初始化数组np.empty((2, 2)) → 未初始化数组,值随机

示例 1:创建全零数组

# 创建3行4列的全零数组
zeros_arr = np.zeros((3, 4))
print("全零数组:")
print(zeros_arr)

示例 2:创建全一数组并指定数据类型

# 创建2行5列的全一数组,数据类型为int
ones_arr = np.ones((2, 5), dtype=int)
print("全一数组:")
print(ones_arr)

示例 3:创建填充指定值的数组

# 创建3x3的全5数组
full_arr = np.full((3, 3), 5)
print("全5数组:")
print(full_arr)

3.4 特殊矩阵生成

在数学和线性代数中,一些特殊矩阵(如单位矩阵、对角矩阵)具有特定的结构和用途。NumPy 提供了专门的函数来创建这些特殊矩阵。

常用函数

函数功能示例
np.eye()创建单位矩阵np.eye(3) → 3x3 单位矩阵
np.diag()创建对角矩阵np.diag([1, 2, 3]) → 对角线为 1,2,3 的矩阵
np.tri()创建下三角矩阵np.tri(3) → 3x3 下三角矩阵

示例 1:创建单位矩阵

# 创建3x3的单位矩阵
eye_arr = np.eye(3)
print("单位矩阵:")
print(eye_arr)

示例 2:创建对角矩阵

# 创建对角线为1, 2, 3的对角矩阵
diag_arr = np.diag([1, 2, 3])
print("对角矩阵:")
print(diag_arr)

3.5 随机数组生成

在模拟实验、机器学习等场景中,随机数组非常有用。NumPy 的random子模块提供了多种生成随机数组的方法。

常用函数

函数功能示例
np.random.rand()均匀分布随机数np.random.rand(2, 3) → 2x3 均匀分布随机数
np.random.randn()正态分布随机数np.random.randn(2, 3) → 2x3 标准正态分布随机数
np.random.randint()随机整数数组np.random.randint(1, 10, (2, 2)) → 2x2 随机整数数组

示例 1:生成均匀分布随机数

# 生成2x3的均匀分布随机数数组
rand_arr = np.random.rand(2, 3)
print("均匀分布随机数组:")
print(rand_arr)

示例 2:生成正态分布随机数

# 生成2x3的标准正态分布随机数数组
randn_arr = np.random.randn(2, 3)
print("正态分布随机数组:")
print(randn_arr)

示例 3:生成随机整数数组

# 生成2x2的随机整数数组,数值范围[1, 10)
randint_arr = np.random.randint(1, 10, (2, 2))
print("随机整数数组:")
print(randint_arr)

四、ndarray 的基本属性

了解 ndarray 的基本属性对于正确理解和操作数组至关重要。这些属性提供了数组的关键信息,如形状、数据类型、维度等。

4.1 形状相关属性

shape属性:返回一个元组,表示数组的维度大小。对于二维数组,形状元组的第一个元素是行数,第二个是列数。

示例

# 创建不同形状的数组
arr1d = np.array([1, 2, 3, 4, 5])
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
arr3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])# 查看形状
print("一维数组形状:", arr1d.shape)  # 输出:(5,)
print("二维数组形状:", arr2d.shape)  # 输出:(2, 3)
print("三维数组形状:", arr3d.shape)  # 输出:(2, 2, 2)

ndim属性:返回数组的维度数量(轴的个数)。

示例

print("一维数组维度:", arr1d.ndim)  # 输出:1
print("二维数组维度:", arr2d.ndim)  # 输出:2
print("三维数组维度:", arr3d.ndim)  # 输出:3

size属性:返回数组中所有元素的总数。

示例

print("一维数组元素总数:", arr1d.size)  # 输出:5print("二维数组元素总数:", arr2d.size)  # 输出:6print("三维数组元素总数:", arr3d.size)  # 输出:8

4.2 数据类型相关属性

dtype属性:返回数组元素的数据类型。NumPy 支持多种数据类型,包括整数、浮点数、布尔值、复数等。

示例

# 创建不同数据类型的数组
arr_int = np.array([1, 2, 3], dtype=np.int32)
arr_float = np.array([1.0, 2.0, 3.0], dtype=np.float64)
arr_bool = np.array([True, False, True])# 查看数据类型
print("整数数组类型:", arr_int.dtype)  # 输出:int32
print("浮点数组类型:", arr_float.dtype)  # 输出:float64
print("布尔数组类型:", arr_bool.dtype)  # 输出:bool

itemsize属性:返回数组中每个元素占用的字节数。

示例

print("int32数组元素大小:", arr_int.itemsize)  # 输出:4(字节)
print("float64数组元素大小:", arr_float.itemsize)  # 输出:8(字节)
print("bool数组元素大小:", arr_bool.itemsize)  # 输出:1(字节)

nbytes属性:返回数组占用的总字节数,等于size乘以itemsize

示例

print("int32数组总字节数:", arr_int.nbytes)  # 输出:12(3元素 × 4字节)
print("float64数组总字节数:", arr_float.nbytes)  # 输出:24(3元素 × 8字节)

4.3 数组转换与重塑

reshape()方法:返回一个具有新形状的数组视图,而不改变原始数据。

示例

# 创建一维数组
arr = np.arange(12)
print("原始数组:", arr)  # 输出:[0 1 2 3 4 5 6 7 8 9 10 11]# 重塑为3行4列的二维数组
reshaped_arr = arr.reshape(3, 4)
print("重塑后的数组:")
print(reshaped_arr)

ravel()方法:返回一个展平的一维数组。

示例

# 将二维数组展平为一维数组
flattened_arr = reshaped_arr.ravel()
print("展平后的数组:", flattened_arr)  # 输出:[0 1 2 3 4 5 6 7 8 9 10 11]
http://www.dtcms.com/a/395607.html

相关文章:

  • 课题学习——SimCSE
  • gitee.com 有raw.githubusercontent.com一样的机制吗?
  • AI原生未来:新商业机会全景洞察与商业模式深度解构
  • Spark源码中的volatile
  • IDEA运行/调试配置找不到对应脚本的命令
  • 测试duckdb的C插件模板的编译加工和加载
  • 如何用AI工具开发一个轻量化CRM系统(二):需求分析
  • ARM架构学习9——LM75温度传感器+ADC转换器
  • 再见,Windows 10:升级 Windows 11 的必要性!
  • 数据结构从入门到实战——算法的时间复杂度
  • Rust字符串
  • 【图文详解】强化学习最新进展以及核心技术突破方向、核心技术架构
  • Linux SSH 安全加固与批量管理:密钥认证 + 自动化脚本 + OpenSSH 升级
  • 一个可以直接跑满本地带宽文件分享工具 开箱即用,可用于局域网内分享文件和文件夹
  • 探索AI无人直播技术:自动化带来的新机遇
  • Codeforces Round 1051 (Div. 2) D1题 题解记录
  • 计算机视觉、图像处理国际学术会议
  • redhat7.4升级到Oracle Linux8.10
  • PEFT库实战快速入门
  • PyTorch 核心知识手册:神经网络构建与训练基础
  • DeepSeek对数学工具的分类(2025.1.13)
  • 2025年9月打磨机器人新技术解析与常见知名品牌推荐
  • STM32开发(WiFi - ESP8266)
  • ArcGIS 车辆轨迹跟踪 视频制作 第一人称视觉跟踪
  • Ansible自动化运维平台部署
  • VGG和PyTorch 神经网络工具箱
  • Linux系统nginx(一)
  • 144g网页制作最新 144g网页在线生成方法
  • PyTorch 神经网络工具箱全面解析
  • mac-vlan 概念及题目