news 2026/4/27 10:03:32

Python NumPy 入门教程:从数组创建到广播运算,快速掌握高效数值计算

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python NumPy 入门教程:从数组创建到广播运算,快速掌握高效数值计算

Python NumPy 入门教程:从数组创建到广播运算,快速掌握高效数值计算

很多人在学完 Python 基础语法之后,都会碰到一个非常现实的问题:如果我要处理大量数字、矩阵、表格型数值数据,只靠原生 list 会不会太慢、太笨重?

这时候,NumPy往往就是第一个必须掌握的库。

它是 Python 数值计算生态的基础组件。很多你后面会接触到的库,比如PandasSciPyscikit-learnMatplotlib,底层都离不开它。

如果你是新手,这篇文章的目标不是把NumPy讲得特别学术,而是让你尽快搞明白:

  • NumPy到底是干什么的
  • 它和 Python 原生列表有什么区别
  • 最常用的数组操作怎么写
  • 新手最常用的广播、切片、聚合、条件筛选怎么理解
  • 怎样用一个完整示例快速上手

学完之后,你至少能独立写出常见的数组计算、基础矩阵处理和简单数据预处理代码。

1. NumPy 是什么

NumPy全名是Numerical Python,是 Python 里最经典的数值计算库之一。

它最核心的能力是提供一个高效的多维数组对象ndarray,以及围绕数组进行批量计算的一整套函数。

它特别适合这些场景:

  • 批量数值计算
  • 向量和矩阵运算
  • 数据分析前的数据准备
  • 科学计算和算法实验
  • 机器学习里的特征处理

简单说,NumPy的优势不是“能不能算”,而是让大量数值操作更快、更整洁、更适合批量处理

2. 为什么很多 Python 学习者都绕不开 NumPy

如果你只处理几条数据,Python 的list当然够用。

但一旦进入下面这些场景,NumPy的价值就会非常明显:

  • 有一大批数字需要统一加减乘除
  • 需要按行按列做统计
  • 需要处理二维表格、矩阵或更高维数据
  • 需要做条件筛选、归一化、标准化
  • 后续还要接入Pandas或机器学习库

比如你想把一组商品价格全部打九折,原生列表通常要写循环;用NumPy,一行就能完成:

prices=np.array([15,20,35,40])discount=prices*0.9

这类“整批运算”的能力,就是NumPy最值得学的地方。

3. 安装 NumPy

直接安装:

pipinstallnumpy

安装后可以简单检查版本:

python-c"import numpy as np; print(np.__version__)"

导入方式通常这样写:

importnumpyasnp

npNumPy的常见别名,几乎所有教程和项目都这么写。

4. 先理解 NumPy 最核心的对象:ndarray

NumPy里最重要的数据结构是ndarray,也就是多维数组。

可以先把它理解成“比 list 更适合数值运算的数组”。

先看最简单的创建方式:

importnumpyasnp arr=np.array([10,20,30,40])print(arr)print(type(arr))

输出类似:

[10 20 30 40] <class 'numpy.ndarray'>

二维数组也很常见:

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

这时候你就可以把它看成一个2 行 3 列的数值矩阵。

5. 常见的数组创建方式

5.1 从列表创建

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

5.2 创建全 0 数组

zeros=np.zeros((2,3))

表示创建一个2 行 3 列的全零数组。

5.3 创建全 1 数组

ones=np.ones((3,2))

5.4 创建连续数字

arr=np.arange(1,10)

这会得到:

[1 2 3 4 5 6 7 8 9]

5.5 创建等间距数组

arr=np.linspace(0,1,5)

结果是从01均匀切成5个点。

6. shape、dtype、ndim 这几个属性一定要熟

NumPy数组最常用的基础信息包括:

  • shape:形状
  • dtype:数据类型
  • ndim:维度数

示例:

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

输出类似:

(2, 3) int64 2

这里的意思是:

  • 数组有2个维度
  • 形状是2 行 3 列
  • 元素类型是整数

7. reshape:改变数组形状

reshape()NumPy里非常高频的方法。

arr=np.arange(1,13)matrix=arr.reshape(3,4)print(arr)print(matrix)

输出类似:

[ 1 2 3 4 5 6 7 8 9 10 11 12] [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]]

这类操作特别适合把一维数据整理成二维表格结构。

8. 索引和切片

如果你会 Python 列表切片,NumPy会很快上手,只是二维数组更常见。

arr=np.arange(1,13).reshape(3,4)print(arr[1,2])print(arr[:,1])print(arr[0:2,1:3])

含义分别是:

  • arr[1, 2]:第 2 行第 3 列
  • arr[:, 1]:取第 2 列全部数据
  • arr[0:2, 1:3]:取前两行、第 2 到第 3 列

新手一开始最重要的是先把“行列索引”的感觉建立起来。

9. NumPy 为什么适合批量运算

这是NumPy最核心的优势之一。

arr=np.array([1,2,3,4])print(arr+10)print(arr*2)print(arr/2)

输出类似:

[11 12 13 14] [2 4 6 8] [0.5 1. 1.5 2. ]

也就是说,运算会直接作用到整个数组,而不是要求你手写循环逐个处理。

10. 广播机制,新手一定要先理解个大概

广播是NumPy非常经典的特性。你可以把它先简单理解成:

当不同形状的数据在某些规则下可以对齐时,NumPy 会自动帮你把较小的数据“扩展”后再计算。

最常见的例子:

prices=np.array([15,20,35,40])discount=prices*0.9print(discount)

这里数组里的每个元素都会乘以0.9

再看一个二维例子:

scores=np.array([[80,85,90],[75,88,92]])bonus=np.array([5,0,3])result=scores+bonusprint(result)

这里bonus会按列广播到每一行。

新手不需要一开始就背复杂规则,但要先知道:NumPy 很多“看起来没写循环”的批量计算,本质上都和广播有关。

11. 聚合统计:sum、mean、max、min

做数据处理时,经常需要求和、均值、最大值、最小值。

sales=np.array([[1200,1500,1800],[1000,1600,1700],[900,1400,2100]])print(sales.sum())print(sales.mean())print(sales.max())print(sales.min())

如果想按行或按列统计,就用axis

print(sales.sum(axis=0))# 按列求和print(sales.mean(axis=1))# 按行求均值

可以先记住:

  • axis=0:沿着行方向压缩,通常得到“每列结果”
  • axis=1:沿着列方向压缩,通常得到“每行结果”

12. 条件筛选和布尔数组

NumPy做筛选非常方便。

scores=np.array([88,92,79,95,90])high_scores=scores[scores>=90]print(high_scores)

输出:

[92 95 90]

你也可以得到一个布尔数组:

print(scores>=90)

输出类似:

[False True False True True]

这类写法在做数据清洗和过滤时非常常见。

13. np.where:条件替换

如果你想根据条件生成新结果,np.where()很常用。

scores=np.array([88,92,79,95,90])levels=np.where(scores>=90,"A","B")print(levels)

输出:

['B' 'A' 'B' 'A' 'A']

这个函数在做标签转换、分段判断时很好用。

14. 随机数

做模拟实验、机器学习、测试数据生成时,随机数很常见。

推荐新写法:

rng=np.random.default_rng(seed=42)arr=rng.integers(0,10,size=(2,3))print(arr)

这里的重点有两个:

  • seed=42让结果可复现
  • size=(2, 3)表示生成一个2 行 3 列的数组

15. 矩阵乘法

NumPy当然也支持矩阵运算。

a=np.array([[1,2],[3,4]])b=np.array([[5,6],[7,8]])print(a @ b)

输出:

[[19 22] [43 50]]

这里的@是矩阵乘法,不是普通的逐元素乘法。

如果写成:

print(a*b)

那就是对应位置逐元素相乘。

16. 一个适合新手直接运行的完整示例

为了方便你本地练习,我把常见操作整理成了一个独立脚本:

numpy_beginner_examples.py

完整代码如下:

importnumpyasnpdefmain()->None:print("1. 创建数组")scores=np.array([88,92,79,95,90])matrix=np.array([[1,2,3],[4,5,6]])print("scores =",scores)print("matrix =\n",matrix)print("\n2. 查看形状和数据类型")print("scores.shape =",scores.shape)print("matrix.shape =",matrix.shape)print("scores.dtype =",scores.dtype)print("\n3. reshape 改变形状")numbers=np.arange(1,13)reshaped=numbers.reshape(3,4)print("numbers =",numbers)print("reshaped =\n",reshaped)print("\n4. 索引和切片")print("reshaped[1, 2] =",reshaped[1,2])print("reshaped[:, 1] =",reshaped[:,1])print("reshaped[0:2, 1:3] =\n",reshaped[0:2,1:3])print("\n5. 广播机制")prices=np.array([15,20,35,40],dtype=float)discount=prices*0.9print("prices =",prices)print("discount =",discount)print("\n6. 聚合统计")sales=np.array([[1200,1500,1800],[1000,1600,1700],[900,1400,2100],])print("sales =\n",sales)print("总销售额 =",sales.sum())print("每个月总额 =",sales.sum(axis=0))print("每个门店均值 =",sales.mean(axis=1))print("\n7. 布尔筛选")high_scores=scores[scores>=90]print("scores >= 90 ->",high_scores)print("\n8. 条件替换")levels=np.where(scores>=90,"A","B")print("levels =",levels)print("\n9. 随机数和可复现结果")rng=np.random.default_rng(seed=42)random_matrix=rng.integers(0,10,size=(2,3))print("random_matrix =\n",random_matrix)print("\n10. 矩阵乘法")a=np.array([[1,2],[3,4]])b=np.array([[5,6],[7,8]])print("a @ b =\n",a @ b)if__name__=="__main__":main()

17. 新手学 NumPy 最容易踩的坑

  • listndarray混着理解,结果不知道为什么运算行为不同
  • 分不清逐元素乘法*和矩阵乘法@
  • reshape时元素个数对不上
  • 二维索引时把行列顺序写反
  • 不理解axis,导致统计结果方向错了

比较稳妥的学习顺序是:

  1. 先学数组创建、shape、dtype
  2. 再学索引切片和 reshape
  3. 再学批量运算、广播、聚合
  4. 最后再学随机数、矩阵计算和和其他库配合

18. 总结

NumPy是 Python 数值计算最重要的基础库之一。对新手来说,最关键的不是一下子学会所有函数,而是先把下面几个能力练熟:

  • 会创建数组
  • 会看 shape 和 dtype
  • 会切片和 reshape
  • 会做整批运算
  • 会做筛选和统计

只要这几个基础打稳,后面你去学Pandas、数据分析、机器学习,都会轻松很多。

如果你刚开始练习,建议先把文中的示例脚本跑起来,然后自己扩展这几个方向:

  • 自己构造学生成绩表并做统计
  • 用随机数生成测试数据
  • 自己尝试二维数组按行按列计算
  • 把 NumPy 结果再交给 Pandas 做表格展示

从“会看懂”到“会自己写”,你就算真正入门NumPy了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 10:01:26

从漏洞响应到安全加固:Helm项目依赖管理终极实战指南

从漏洞响应到安全加固&#xff1a;Helm项目依赖管理终极实战指南 【免费下载链接】helm The Kubernetes Package Manager 项目地址: https://gitcode.com/GitHub_Trending/hel/helm Helm作为Kubernetes的包管理器&#xff0c;其依赖管理功能是保障应用部署安全的核心环节…

作者头像 李华
网站建设 2026/4/27 10:01:25

终极指南:使用jq实现数据标准化,统一JSON格式与规范

终极指南&#xff1a;使用jq实现数据标准化&#xff0c;统一JSON格式与规范 【免费下载链接】jq Command-line JSON processor 项目地址: https://gitcode.com/GitHub_Trending/jq/jq jq作为一款强大的命令行JSON处理器&#xff0c;能够帮助开发者轻松实现JSON数据的标准…

作者头像 李华
网站建设 2026/4/27 9:55:47

从Shader报错到性能优化:深入理解Unity中的法线变换与矩阵求逆

从Shader报错到性能优化&#xff1a;深入理解Unity中的法线变换与矩阵求逆 当你在Unity中编写自定义Shader时&#xff0c;是否遇到过这样的场景&#xff1a;明明模型看起来位置正确&#xff0c;但光照效果却异常扭曲&#xff1f;这种问题往往源于一个容易被忽视的细节——法线变…

作者头像 李华
网站建设 2026/4/27 9:55:25

XHS-Downloader:5步搞定小红书内容采集与无水印下载

XHS-Downloader&#xff1a;5步搞定小红书内容采集与无水印下载 【免费下载链接】XHS-Downloader 小红书&#xff08;XiaoHongShu、RedNote&#xff09;链接提取/作品采集工具&#xff1a;提取账号发布、收藏、点赞、专辑作品链接&#xff1b;提取搜索结果作品、用户链接&#…

作者头像 李华