零基础小白的 NumPy 入门指南

如果你想用电竞(打游戏)的思路理解编程:Python 是基础操作键位,而 NumPy 就是 “英雄专属技能包”—— 专门帮你搞定 “数值计算” 这类复杂任务,比如算游戏里的伤害公式、地图坐标,或是现实里的成绩统计、数据图表。下面用最通俗的话,把 NumPy 的核心用法拆成 “技能介绍” 和 “操作教程”,小白也能轻松看懂。

一、先搞懂:NumPy 到底能帮我们做什么?

Python 自带的 “计算器”(比如+、-、×、÷,还有math模块)只能算 “单个数字”,比如算 “1+1=2”“根号 4=2”。但如果遇到 “批量计算”,比如 “100 个学生的成绩都加 5 分”“算 30 个坐标点到原点的距离”,自带计算器就会 “手忙脚乱”—— 要写很多重复代码。

NumPy 的核心优势就是:能批量处理 “数组”(可以理解成 “一堆数字的集合”),还自带很多高级数学公式,比如三角函数、矩阵运算,不用我们自己写复杂逻辑,调用现成的 “技能” 就行。

二、NumPy 的核心技能:8 类常用数学函数

你不用死记硬背,先知道 “遇到什么问题,该用哪个技能”,用到时查一下就行。下面按 “使用场景” 分类,每个技能配 “大白话解释” 和简单例子。

1. 三角函数(解决 “角度 / 弧度” 相关问题)

比如游戏里角色旋转角度换算、物理引擎里的抛物线计算,都会用到角度和弧度的转换,或是正弦、余弦值。

函数大白话作用简单例子(先导入 NumPy:import numpy as np
np.sin(x)算 x 的正弦值(x 是弧度)np.sin(np.pi/2) → 结果是 1.0(90 度的正弦值)
np.cos(x)算 x 的余弦值(x 是弧度)np.cos(np.pi) → 结果是 - 1.0(180 度的余弦值)
np.rad2deg(x)把弧度转成角度(常用!)np.rad2deg(np.pi) → 结果是 180.0(π 弧度 = 180 度)
np.deg2rad(x)把角度转成弧度(常用!)np.deg2rad(90) → 结果是 π/2(90 度 =π/2 弧度)
np.hypot(x1,x2)直角三角形求斜边(x1、x2 是直角边)np.hypot(3,4) → 结果是 5.0(3、4、5 直角三角形)

2. 双曲函数(偏数学,但偶尔会用)

和三角函数类似,但针对 “双曲曲线”(比如电场、磁场里的曲线计算),日常用得少,知道有这些功能就行:np.sinh(x)(双曲正弦)、np.cosh(x)(双曲余弦)、np.tanh(x)(双曲正切)。

3. 数值修约(“四舍五入” 进阶版)

比如统计成绩时,“把 60.3 分保留 1 位小数”“把 59.8 分凑整成 60 分”,这些 “调整数字位数” 的操作,叫 “数值修约”。

函数大白话作用例子(假设a = [1.23, 2.56, -3.78]
np.around(a)四舍五入到整数np.around(a) → [1. 3. -4.]
np.floor(a)向下取整(“地板”,取比它小的最大整数)np.floor(a) → [1. 2. -4.]
np.ceil(a)向上取整(“天花板”,取比它大的最小整数)np.ceil(a) → [2. 3. -3.]
np.fix(a)向 0 取整(正数往下、负数往上)np.fix(a) → [1. 2. -3.]

4. 求和、求积、差分(批量算 “总和”“乘积”“差值”)

比如 “算 10 个学生的总分”“算 5 个数据的乘积”“算每天温度的变化量”,用这些函数一步到位。

函数大白话作用例子(假设a = [1,2,3,4,5]
np.sum(a)算数组所有元素的总和np.sum(a) → 15(1+2+3+4+5)
np.prod(a)算数组所有元素的乘积np.prod(a) → 120(1×2×3×4×5)
np.cumsum(a)算 “累积和”(逐个加,存中间结果)np.cumsum(a) → [1,3,6,10,15]
np.diff(a)算 “相邻元素的差值”(后一个减前一个)np.diff(a) → [1,1,1,1](2-1,3-2 等)

5. 指数和对数(复杂数学计算)

比如 “算 2 的 10 次方”“算自然对数(ln)”,这些在概率统计、机器学习里常用。

函数大白话作用例子
np.exp(x)算 e 的 x 次方(e 是数学常数,约 2.718)np.exp(1) → 2.718...
np.log(x)算自然对数(ln x)np.log(np.e) → 1.0
np.log10(x)算常用对数(log₁₀ x,比如算 pH 值)np.log10(100) → 2.0
np.log2(x)算二进制对数(log₂ x,比如算文件大小)np.log2(8) → 3.0

6. 算术运算(数组版 “加减乘除”)

Python 自带的+、-只能算单个数字,NumPy 的这些函数能直接算 “两个数组对应位置的加减乘除”,不用写循环。

函数大白话作用例子(a1 = [1,2,3]a2 = [4,5,6]
np.add(a1,a2)两个数组对应元素相加[1+4, 2+5, 3+6] → [5,7,9]
np.multiply(a1,a2)两个数组对应元素相乘[1×4, 2×5, 3×6] → [4,10,18]
np.divide(a1,a2)两个数组对应元素相除(a1÷a2)[1/4, 2/5, 3/6] → [0.25,0.4,0.5]
np.power(a1,a2)算 a1 的 a2 次方(对应元素)[1⁴, 2⁵, 3⁶] → [1,32,729]

7. 矩阵和向量积(线性代数核心)

比如游戏里的 3D 建模、图形旋转,或是数据分析里的 “矩阵运算”,用这些函数不用手动算矩阵乘法(超容易错)。

最常用的是np.matmul(a,b)(矩阵乘法),比如:

# 定义一个2行3列的矩阵a,一个3行2列的矩阵b
a = np.matrix([[1,2,3], [4,5,6]])  # 2行3列
b = np.matrix([[2,2], [3,3], [4,4]])  # 3行2列
np.matmul(a, b)  # 结果是2行2列的矩阵:[[20,20],[47,47]]

8. 其他常用数学函数(零散但实用)

函数大白话作用例子
np.sqrt(x)算平方根(√x)np.sqrt(16) → 4.0
np.square(x)算平方(x²)np.square(3) → 9.0
np.absolute(x)算绝对值(不管正负,取正数)np.absolute(-5) → 5.0
np.maximum(a1,a2)两个数组对应元素取最大值a1=[1,3,5]a2=[2,2,6] → [2,3,6]
np.minimum(a1,a2)两个数组对应元素取最小值同上 → [1,2,5]

三、NumPy 的 “数组操作”:索引和切片

数组是 NumPy 的 “核心道具”(叫Ndarray),比如 “1 行 10 列的数组”(1 维)、“4 行 5 列的数组”(2 维,像 Excel 表格)、“3 层 4 行 5 列的数组”(3 维,像叠起来的 Excel 表格)。

要从数组里 “拿数据”,就需要 “索引”(按位置取单个值)和 “切片”(按范围取多个值),规则和 Python 的列表(list)很像,但更灵活。

1. 先搞懂 “维度” 和 “索引规则”

数组的 “维度” 就是 “有几个方向”:

  • 1 维数组:像一条直线,只有 “左右” 方向,索引只有 1 个(比如a[0])。
  • 2 维数组:像一张表格,有 “行” 和 “列” 方向,索引有 2 个(比如a[行索引, 列索引])。
  • 3 维数组:像一叠表格,有 “层”“行”“列” 方向,索引有 3 个(比如a[层索引, 行索引, 列索引])。

重要提醒:所有索引都是从 “0” 开始的!比如 “第 1 行” 对应索引0,“第 2 列” 对应索引1

2. 1 维数组:索引和切片(最简单)

a = np.arange(10)  # 生成1维数组:[0,1,2,3,4,5,6,7,8,9]
# 1. 索引:取单个值
a[1]  # 取索引1的值 → 1(对应“第2个元素”)
a[[1,2,3]]  # 取多个索引的值 → [1,2,3]# 2. 切片:按范围取(语法:start:stop:step,即“起始:结束:步长”)
a[:5]  # 从开头取到索引4(不包含5)→ [0,1,2,3,4]
a[5:10]  # 从索引5取到9 → [5,6,7,8,9]
a[0:10:2]  # 步长2,隔一个取一个 → [0,2,4,6,8]

3. 2 维数组:索引和切片(像 Excel 表格)

# 生成2维数组:4行5列(4个行,每个行有5个元素)
a = np.arange(20).reshape(4, 5)  # 结果:
# [[ 0  1  2  3  4]
#  [ 5  6  7  8  9]
#  [10 11 12 13 14]
#  [15 16 17 18 19]]# 1. 索引:取单个值(行索引, 列索引)
a[1, 2]  # 第2行(索引1)、第3列(索引2)→ 7# 2. 切片:按范围取(行范围, 列范围)
a[0:3, 2:4]  # 行取0-2(前3行),列取2-3(第3-4列)→ 
# [[ 2  3]
#  [ 7  8]
#  [12 13]]a[:, ::2]  # 行取所有(:代表所有),列步长2 → 
# [[ 0  2  4]
#  [ 5  7  9]
#  [10 12 14]
#  [15 17 19]]

4. 3 维数组:索引和切片(像叠起来的 Excel)

# 生成3维数组:2层、5行、3列(2个表格,每个表格5行3列)
a = np.arange(30).reshape(2, 5, 3)  # 结构:
# 第0层:
# [[ 0  1  2]
#  [ 3  4  5]
#  [ 6  7  8]
#  [ 9 10 11]
#  [12 13 14]]
# 第1层:
# [[15 16 17]
#  [18 19 20]
#  [21 22 23]
#  [24 25 26]
#  [27 28 29]]# 索引:取单个值(层索引, 行索引, 列索引)
a[0, 1, 2]  # 第0层、第2行、第3列 → 5
a[[0,1], [1,2], [1,2]]  # 取两个值:(0层1行1列)和(1层2行2列) → [4,23]

四、数组的 “排序、搜索、计数”(整理数据常用)

拿到一堆杂乱的数据,比如 “100 个随机数”,需要 “排序”“找最大值位置”“算有多少个非 0 数”,用这些函数很快。

1. 排序:np.sort()

# 生成4行5列的随机数数组
a = np.random.rand(20).reshape(4, 5)  # 随机数在0-1之间
np.sort(a)  # 默认按“最后一个轴”排序(2维数组按“列”排序)
np.sort(a, axis=0)  # 按“行”排序(即每一列从上到下排)

2. 搜索:找 “最大 / 最小 / 非 0” 元素的位置

# 生成20个0-9的随机整数
a = np.random.randint(0, 10, 20)  # 比如结果:[3,5,0,7,2,5,0,9,1,4]np.argmax(a)  # 找最大值的索引 → 7(因为最大值9在索引7的位置)
np.argmin(a)  # 找最小值的索引 → 2(最小值0在索引2的位置)
np.nonzero(a)  # 找所有非0元素的索引 → (array([0,1,3,4,5,7,8,9]),)

3. 计数:算 “非 0 元素的数量”

np.count_nonzero(a)  # 算数组里非0元素有多少个 → 上面的例子里有8个非0元素

五、总结:小白怎么上手 NumPy?

  1. 先装 NumPy:打开命令行,输入pip install numpy(如果没装 Python,先装 Python)。
  2. 每次用前导入:代码开头写import numpy as npnp是大家约定俗成的简称,方便打字)。
  3. 先练 “数组操作”:从 1 维数组的索引、切片开始,再试 2 维,熟悉 “索引从 0 开始” 和 “维度分隔用逗号”。
  4. 遇到数学问题查函数:不用死记,比如要 “算总和” 就搜 “NumPy 求和”,要 “四舍五入” 就搜 “NumPy 四舍五入”,用多了自然就熟了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95709.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95709.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95709.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从自动化到智能化:家具厂智能化产线需求与解决方案解析

伴随着工业4.0浪潮和智能制造技术的成熟,家具行业正逐步从传统的自动化生产迈向智能化生产。智能化产线的构建不仅可以提升生产效率,还能满足个性化定制和柔性制造的需求。本文以某家具厂为例,详细解析智能化产线的核心需求,并提出…

macOS下基于Qt/C++的OpenGL开发环境的搭建

系统配置 MacBook Pro 2015 Intel macOS 12Xcode 14 Qt开发环境搭建 Qt Creator的下载与安装 在Qt官网的下载页面上下载,即Download Qt Online Installer for macOS。下载完成就得到一个文件名类似于qt-online-installer-macOS-x64-x.y.z.dmg的安装包。 下一步 …

当液态玻璃计划遭遇反叛者:一场 iOS 26 界面的暗战

引子 在硅谷的地下代码俱乐部里,流传着一个关于 “液态玻璃” 的传说 —— 那是 Apple 秘密研发的界面改造计划,如同电影《变脸》中那张能改变命运的面具,一旦启用,所有 App 都将被迫换上流光溢彩的新面孔。 而今天,我…

探究Linux系统的SSL/TLS证书机制

一、SSL/TLS证书的基本概念 1.1 SSL/TLS协议简介 SSL/TLS是一种加密协议,旨在为网络通信提供机密性、完整性和身份验证。它广泛应用于HTTPS网站、电子邮件服务、VPN以及其他需要安全通信的场景。SSL(安全套接字层)是TLS(传输层安全…

python和java爬虫优劣对比

Python和Java作为爬虫开发的两大主流语言,核心差异源于语法特性、生态工具链、性能表现的不同,其优势与劣势需结合具体场景(如开发效率、爬取规模、反爬复杂度)判断。以下从 优势、劣势、适用场景 三个维度展开对比,帮…

Unity 枪械红点瞄准器计算

今天突然别人问我红点瞄准器在镜子上如何计算,之前的吃鸡项目做过不记得,今天写个小用例整理下。 主体思想记得是目标位置到眼睛穿过红点瞄准器获取当前点的位置就可以。应该是这样吧,:) 武器测试结构 首先整个结构&am…

题解 洛谷P13778 「o.OI R2」=+#-

文章目录题解代码居然没有题解?我来写一下我的抽象做法。 题解 手玩一下,随便画个他信心的折线图,如下: 可以发现,如果我们知道终止节点,那么我们就可以知道中间有多少个上升长度。(因为它只能…

RTSP流端口占用详解:TCP模式与UDP模式的对比

在音视频传输协议中,RTSP(Real-Time Streaming Protocol,实时流传输协议)被广泛用于点播、直播、监控等场景。开发者在实际部署或调试时,常常会遇到一个问题:一路 RTSP 流到底占用多少个端口? 这…

websocket的key和accept分别是多少个字节

WebSocket的Sec-WebSocket-Key是24字节(192位)的Base64编码字符串,解码后为16字节(128位)的原始随机数据;Sec-WebSocket-Accept是28字节(224位)的Base64编码字符串,解码后…

单片机开发----一个简单的Boot

文章目录一、设计思路**整体框架设计****各文件/模块功能解析**1. main.c(主程序入口,核心控制)2. 隐含的核心模块(框架中未展示但必备)**设计亮点**二、代码bootloader.hbootloader.cflash.cmain.c一、设计思路 整体…

Day2p2 夏暮客的Python之路

day2p2 The Hard Way to learn Python 文章目录day2p2 The Hard Way to learn Python前言一、提问和提示1.1 关于raw_input()1.2 关于input()二、参数、解包、变量2.1 解读参数2.2 解读解包2.3 解读变量2.4 实例2.5 模块和功能2.6 练习前言 author:SummerEnd date…

【C++设计模式】第二篇:策略模式(Strategy)--从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析

C设计模式系列文章目录 【第一篇】C单例模式–懒汉与饿汉以及线程安全 【C设计模式】第二篇:策略模式(Strategy)--从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析一、策略模式的基本介绍1.…

四十岁编程:热爱、沉淀与行业的真相-优雅草卓伊凡

四十岁编程:热爱、沉淀与行业的真相-优雅草卓伊凡今日卓伊凡收到一个问题:「如何看待40岁还在撸代码的程序员?」这让我不禁思考:从何时起,年龄成了程序员职业中的敏感词?在互联网的某些角落,弥漫…

pycharm解释器使用anaconda建立的虚拟环境里面的python,无需系统里面安装python。

Anaconda建立的虚拟环境可以在虚拟环境里设置任何的python版本,pycharm解释器使用anaconda建立的虚拟环境里面的python,比如anaconda建立的虚拟环境1、虚拟环境2,pycharm解释器使用anaconda建立虚拟环境1也可以使用虚拟环境2,根本…

机器学习:后篇

目录 一、KNN算法-分类 样本距离 KNN算法原理 缺点 API 二、模型选择与调优 交叉验证 保留交叉验证(HoldOut) k-折交叉验证(K-fold) 分层k-折交叉验证(Stratified k-fold) 其他交叉验证 三、朴素贝叶斯-分类 理论介绍 拉普拉斯平滑系数 API 四、决策树-分类 理论…

C++17无锁编程实战

在多线程编程里,“锁” 这东西就像把双刃剑 —— 用好了能保数据安全,用不好就麻烦了:大粒度的锁把并发度压得死死的,稍不注意加错锁还可能搞出死锁,程序直接 “僵住”。 但如果能摆脱锁,搞出支持安全并发…

SVT-AV1 svt_aom_motion_estimation_kernel 函数分析

void *svt_aom_motion_estimation_kernel(void *input_ptr) // 运动估计内核主函数,接收线程输入参数{// 从输入参数中获取线程上下文指针EbThreadContext * thread_ctx (EbThreadContext *)input_ptr;// 从线程上下文中获取运动估计上下文指针MotionEstimationCon…

关于NET Core jwt Bearer Token 验证的大坑,浪费3个小时,给各位兄弟搭个桥。

net core 使用jwt Bearer Token 认证获取接口访问权限,前期一阵操作没任何问题,等认证接口写的好了,通过PostMan测试的时候,总是报一个 IDX14102: Unable to decode the header eyJhbGciOiJIUzI1NiIsInR5cCI6 ,错误&a…

系统架构设计师备考第14天——业务处理系统(TPS)

一、TPS的核心概念与定位 1. 定义与演进 定义:TPS(Transaction Processing System)又称电子数据处理系统(EDPS),是处理企业日常事务的信息系统,如财务、库存、销售等局部业务管理。历史地位&…

目标检测系列-Yolov5下载及运行

由于项目需要,最近一直在看目标检测相关的资料,不过纸上得来终觉浅,绝知此事要躬行啊。从今日起,将学习的过程记录一下,作为以后用来复习的材料吧。 我想最快的学习便是直接动手做项目,因此今天就将yolov5模…