news 2026/4/23 14:10:05

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/4/21 7:34:51

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://gitcode.com/gh_m…

作者头像 李华
网站建设 2026/4/18 8:40:12

C++ 设计模式之工厂模式(Factory)和面试问题

工厂模式(Factory)一、问题背景:为什么需要工厂模式 1. 直接 new 带来的问题 典型代码: Shape* s new Circle(10);问题不在于 new,而在于: 类型强耦合违反开闭原则(OCP)创建逻辑分散…

作者头像 李华
网站建设 2026/4/20 19:54:24

GLM-4.6V-Flash-WEB部署避坑总结,少走弯路必备

GLM-4.6V-Flash-WEB部署避坑总结,少走弯路必备 1. 引言:轻量视觉大模型的落地挑战 随着多模态AI在电商、客服、内容审核等场景中的广泛应用,开发者对低延迟、低成本、易部署的视觉语言模型需求日益迫切。智谱AI推出的 GLM-4.6V-Flash-WEB 正…

作者头像 李华
网站建设 2026/4/17 11:53:14

AI读脸术日志轮转:避免磁盘占满的自动清理配置

AI读脸术日志轮转:避免磁盘占满的自动清理配置 1. 背景与挑战 在部署轻量级AI服务时,我们往往关注模型推理性能和资源占用,却容易忽视一个关键运维问题——日志文件的无限增长。以“AI读脸术”这类基于OpenCV DNN的人脸属性分析服务为例&am…

作者头像 李华
网站建设 2026/4/23 11:28:50

小白也能懂的YOLO11教程,从安装到检测全流程

小白也能懂的YOLO11教程,从安装到检测全流程 1. 引言:为什么选择YOLO11? 目标检测是计算机视觉中的核心任务之一,旨在识别图像中物体的类别并定位其位置。传统方法如R-CNN系列采用“区域提议分类”的两阶段策略,虽然…

作者头像 李华
网站建设 2026/4/23 11:29:06

语音合成总出错?GLM-TTS常见问题解决方案

语音合成总出错?GLM-TTS常见问题解决方案 1. 引言:为什么你的语音合成总是不理想? 在构建智能语音助手、有声读物系统或个性化通知服务时,高质量的文本转语音(TTS)能力已成为核心需求。然而,即…

作者头像 李华