news 2026/5/14 8:45:48

Day 46:【99天精通Python】数据分析 NumPy 基础 - 高性能计算的基石

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day 46:【99天精通Python】数据分析 NumPy 基础 - 高性能计算的基石

Day 46:【99天精通Python】数据分析 NumPy 基础 - 高性能计算的基石

前言

欢迎来到实战篇的第一天(第46天)!

从今天开始,我们将踏入 Python 最引以为傲的领域——数据分析与科学计算。在这个领域,Python 是当之无愧的霸主。无论是金融量化、人工智能、图像处理,还是科研数据分析,Python 都是首选语言。

而这一切的基石,就是NumPy

你可能会问:“Python 不是自带列表(List)吗?为什么还要学一个 NumPy 数组?”
简单的回答是:NumPy 比 Python 列表快 10 倍甚至 100 倍,而且更省内存。

本节内容:

  • 数据分析三剑客简介
  • NumPy ndarray vs Python List
  • 创建数组的多种方式
  • 数组的属性 (shape, dtype)
  • 基础运算与广播机制 (Broadcasting)
  • 索引与切片入门

一、数据分析三剑客

在 Python 数据分析领域,有三个库是必须掌握的核心:

  1. NumPy (Numerical Python):提供高性能的数组计算,是其他所有库的基础。
  2. Pandas:基于 NumPy,提供了类似 Excel 的表格数据结构 (DataFrame),擅长数据清洗和处理。
  3. Matplotlib:负责画图,将数据可视化。

我们先从地基 NumPy 开始。

安装

pipinstallnumpy

二、为什么用 NumPy?

2.1 性能对比

Python 的 List 是一个"大杂烩",里面可以存整数、字符串、对象,这导致它在内存中存储是不连续的,计算时需要检查每个元素的类型,效率低下。

NumPy 的数组 (ndarray) 要求所有元素类型相同,在内存中是连续存储的,并且底层用 C 语言编写,可以充分利用 CPU 的 SIMD 指令集进行并行计算。

实测对比:计算 100 万个数字的平方和。

importnumpyasnpimporttime size=1_000_000# --- Python List ---list_data=list(range(size))start=time.time()sum([x**2forxinlist_data])print(f"List 耗时:{time.time()-start:.4f}秒")# --- NumPy Array ---np_data=np.arange(size)start=time.time()np.sum(np_data**2)print(f"NumPy 耗时:{time.time()-start:.4f}秒")

结果:NumPy 通常比 List 快 10-50 倍!


三、创建数组 (ndarray)

ndarray(N-dimensional array object) 是 NumPy 的核心对象。

3.1 从列表创建np.array()

importnumpyasnp# 一维数组arr1=np.array([1,2,3,4,5])print(arr1)# 二维数组 (矩阵)arr2=np.array([[1,2,3],[4,5,6]])print(arr2)

3.2 快速生成

# 生成全0数组 (float类型)print(np.zeros(5))# [0. 0. 0. 0. 0.]# 生成全1数组 (指定int类型)print(np.ones((2,3),dtype=int))# [[1 1 1]# [1 1 1]]# 类似 range()print(np.arange(0,10,2))# [0 2 4 6 8]# 等差数列 (linspace): 0到1之间生成5个点print(np.linspace(0,1,5))# [0. 0.25 0.5 0.75 1. ]# 随机数 (0-1之间)print(np.random.rand(3,3))

四、数组的属性

了解数组长什么样非常重要。

arr=np.array([[1,2,3],[4,5,6]])print(f"维度 (ndim):{arr.ndim}")# 2print(f"形状 (shape):{arr.shape}")# (2, 3) -> 2行3列print(f"元素总数 (size):{arr.size}")# 6print(f"数据类型 (dtype):{arr.dtype}")# int64 (或 int32)

注意:NumPy 的数据类型比 Python 丰富,如int8,int16,float32等,这有助于精确控制内存占用。


五、基础运算与广播 (Broadcasting)

这是 NumPy 最爽的地方。在 Python List 里,[1, 2] + [3, 4]结果是[1, 2, 3, 4](拼接)。
但在 NumPy 里,运算是基于元素 (Element-wise)的。

5.1 数组与数字运算

arr=np.array([1,2,3])print(arr+10)# [11 12 13] (每个元素都+10)print(arr*2)# [2 4 6]print(arr>1)# [False True True] (生成布尔数组)

5.2 数组与数组运算

a=np.array([1,2,3])b=np.array([10,20,30])print(a+b)# [11 22 33]print(a*b)# [10 40 90] (对应位置相乘,不是矩阵乘法!)

5.3 统计计算

arr=np.array([[1,2,3],[4,5,6]])print(np.sum(arr))# 所有元素之和: 21print(np.mean(arr))# 平均值: 3.5print(np.max(arr))# 最大值: 6# 指定维度 (axis)# axis=0: 跨行操作 (压缩行,保留列) -> 计算每一列的和print(np.sum(arr,axis=0))# [5 7 9] (1+4, 2+5, 3+6)# axis=1: 跨列操作 (压缩列,保留行) -> 计算每一行的和print(np.sum(arr,axis=1))# [6 15]

六、索引与切片

6.1 一维数组 (同 Python List)

arr=np.arange(10)print(arr[2])# 2print(arr[2:5])# [2 3 4]print(arr[::-1])# 反转

6.2 多维数组

语法:arr[行, 列]

arr=np.array([[1,2,3],[4,5,6],[7,8,9]])print(arr[0,0])# 1 (第0行第0列)print(arr[1,:])# [4 5 6] (第1行,所有列)print(arr[:,1])# [2 5 8] (所有行,第1列)print(arr[0:2,1:3])# [[2 3]# [5 6]] (前两行,第1-2列)

七、小结

NumPy

核心对象

创建

运算

ndarray

shape, dtype, ndim

array()

arange() / linspace()

zeros() / ones()

Element-wise (+ - * /)

聚合 (sum, mean, max)

Broadcasting (广播)

关键要点

  1. NumPy 数组类型一致,内存连续,计算速度极快。
  2. shape属性决定了数组的结构。
  3. 运算默认是对每个元素进行操作。
  4. 多维切片使用逗号分隔[row, col]

八、课后作业

  1. 成绩处理:创建一个 5x3 的随机整数数组(范围 50-100),模拟 5 个学生 3 门课的成绩。
    • 计算每个学生的平均分。
    • 计算每门课的最高分。
  2. 棋盘生成:创建一个 8x8 的矩阵,生成国际象棋棋盘的图案(0为黑,1为白,交替出现)。提示:使用切片赋值arr[::2, ::2] = 1等。
  3. 图像原理:一张图片本质上就是一个三维数组 (高, 宽, RGB)。尝试用np.zeros((100, 100, 3), dtype=int)创建一个黑色图片,然后将中间 50x50 的区域全部赋值为[255, 0, 0](红色)。

下节预告

Day 47:NumPy 进阶 - 维度变换与布尔索引- 数组形状不合适怎么变?怎么快速筛选出大于 60 分的成绩?明天我们继续深入 NumPy。


系列导航

  • 上一篇:Day 45 - 进阶篇总结与展望
  • 下一篇:Day 47 - NumPy进阶(待更新)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 18:31:03

fft npainting lama图像修复系统ARM架构:树莓派等设备可行性测试

fft npainting lama图像修复系统ARM架构:树莓派等设备可行性测试 1. 引言 随着边缘计算和嵌入式AI应用的快速发展,将图像修复类深度学习模型部署到低功耗、低成本的ARM架构设备(如树莓派)上成为一项具有实际价值的技术探索。本文…

作者头像 李华
网站建设 2026/5/13 17:14:38

迎接充电基础设施“新规范”,如何用一套系统实现全网智能管理?

安科瑞刘鸿鹏172 一 ⑥⑨⑦② 一 5322摘要随着工业用电规模的持续扩大,中压配电系统在保障企业连续生产中的重要性日益凸显。开关柜作为工业配电系统的关键节点,其内部绝缘状态直接影响供电安全与运行可靠性。局部放电作为绝缘劣化的早期表现形式&#x…

作者头像 李华
网站建设 2026/5/9 3:57:54

OpenDataLab MinerU避坑指南:常见问题全解答

OpenDataLab MinerU避坑指南:常见问题全解答 1. 引言 在当前AI驱动的文档智能处理场景中,OpenDataLab/MinerU2.5-2509-1.2B 模型凭借其轻量级架构和专业化的文档理解能力,成为众多开发者与企业的首选工具。该模型基于 InternVL 架构&#x…

作者头像 李华
网站建设 2026/5/2 11:24:59

AMD Ryzen处理器调试终极指南:全面解锁硬件性能潜力

AMD Ryzen处理器调试终极指南:全面解锁硬件性能潜力 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitc…

作者头像 李华
网站建设 2026/5/14 1:47:48

Qwen3-32B极速体验:5分钟从注册到对话,不装环境

Qwen3-32B极速体验:5分钟从注册到对话,不装环境 你是不是也遇到过这样的情况:产品发布会马上就要开始了,领导突然说“加个AI互动环节”,技术同事却临时请假,整个团队陷入慌乱?别急——今天我要…

作者头像 李华
网站建设 2026/4/30 0:56:46

Legacy iOS Kit完全指南:让老款苹果设备重获新生的终极工具链

Legacy iOS Kit完全指南:让老款苹果设备重获新生的终极工具链 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to downgrade/restore, save SHSH blobs, and jailbreak legacy iOS devices 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit …

作者头像 李华