NumPy入门:面试官问“Python怎么做矩阵运算“,别说用嵌套list
Python基础打好了今天进入NumPy。NumPy是Python科学计算的基石。做机器人开发处理传感器数据、做矩阵运算、跑算法原型几乎离不开它。面试的时候如果岗位涉及Python开发NumPy是必考内容。先说个对比。C里做矩阵运算你可能会用Eigen。Python里对应的就是NumPy。Eigen的Matrix类型在NumPy里是ndarray。Eigen有矩阵乘法、求逆、特征值分解NumPy全都有。但NumPy比Eigen更通用——它不只是矩阵库而是一个多维数组处理框架。图像数据是三维数组高x宽x通道点云是二维数组Nx3时间序列是一维数组。NumPy统一处理这些数据格式。ndarrayNumPy的核心对象NumPy的核心是ndarray——N维数组。和Python原生的list相比ndarray有两个关键优势。第一内存连续。ndarray在内存中是连续存储的和C的数组一样。这意味着CPU缓存命中率高遍历速度快。Python的list存的是对象指针每个元素散落在堆内存的不同位置。第二向量化运算。ndarray支持逐元素运算不需要写循环import numpy as np a np.array([1.0, 2.0, 3.0]) b np.array([4.0, 5.0, 6.0]) c a b # [5.0, 7.0, 9.0] d a * b # [4.0, 10.0, 18.0] e np.dot(a, b) # 32.0 点积同样的操作如果用Python list写需要for循环或者列表推导式。NumPy的向量化运算底层是C实现比纯Python快几十倍甚至上百倍。创建数组的几种方式# 从list创建 arr np.array([1, 2, 3, 4]) # 常用工厂函数 zeros np.zeros((3, 4)) # 3x4全零矩阵 ones np.ones((2, 3)) # 2x3全一矩阵 eye np.eye(3) # 3x3单位矩阵 rand np.random.rand(3, 4) # 3x4随机矩阵 # 等差序列 linspace np.linspace(0, 1, 100) # 0到1之间100个均匀点 arange np.arange(0, 10, 0.5) # 0到10步长0.5在机器人开发中np.zeros常用于初始化缓冲区np.linspace常用于生成轨迹插值点np.eye常用于构造变换矩阵。数组操作reshape、切片、广播reshape——改变数组形状但不改变数据# 一个12元素的一维数组 flat np.arange(12) # 变成3x4的矩阵 matrix flat.reshape(3, 4) # 变成2x2x3的三维数组 tensor flat.reshape(2, 2, 3) # -1表示自动推断维度 matrix2 flat.reshape(3, -1) # 等价于reshape(3, 4)切片——和Python list类似但更强大data np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) data[0, :] # 第一行: [1, 2, 3] data[:, 1] # 第二列: [2, 5, 8] data[0:2, 1:] # 子矩阵: [[2, 3], [5, 6]]注意NumPy的切片返回的是视图view不是拷贝。修改视图会改变原数组。如果需要独立的副本用.copy()sub data[0:2, :].copy() # 独立副本广播broadcasting——不同形状的数组之间做运算# 一个3x4矩阵加上一个长度为4的向量 matrix np.ones((3, 4)) vector np.array([1, 2, 3, 4]) result matrix vector # 自动广播每行都加上vector广播规则是两个数组的维度从右往左对齐每个维度要么相等要么其中一个是1。不满足规则会报ValueError。数学运算和统计data np.random.rand(1000) # 统计 mean np.mean(data) std np.std(data) max_val np.max(data) min_val np.min(data) # 矩阵运算 A np.random.rand(3, 3) B np.random.rand(3, 3) C A B # 矩阵乘法等价于np.dot(A, B) A_inv np.linalg.inv(A) # 求逆 eigenvalues np.linalg.eig(A) # 特征值分解运算符是Python 3.5引入的矩阵乘法符号比np.dot更直观。数据类型和内存NumPy数组是同质homogeneous的——所有元素必须是同一类型。这和Python list不同list可以混合存放不同类型。arr_float64 np.array([1.0, 2.0], dtypenp.float64) # 默认 arr_float32 np.array([1.0, 2.0], dtypenp.float32) # 省内存 arr_int32 np.array([1, 2, 3], dtypenp.int32)在机器人系统中如果精度要求高比如SLAM中的位姿估计用float64如果数据量大但对精度要求不高比如点云可视化用float32可以省一半内存。另一个值得注意的点NumPy默认是C顺序行优先和C一样。但Fortran顺序列优先在某些线性代数运算中更高效。用orderF可以指定。如果你从Fortran或MATLAB迁移过来这个设置很重要。NumPy常见踩坑记录新手用NumPy最容易犯的错误之一是切片修改了原数组。a np.array([1,2,3]); b a[:2]; b[0] 99结果a也变了。这是因为b是a的视图不是副本。解决方式是显式.copy()。但在大数组上频繁copy会影响性能所以要在安全和效率之间取舍。另一个坑是整数溢出。np.array([200], dtypenp.int8) np.array([100], dtypenp.int8)的结果不是300而是-56因为int8的范围是-128到127。NumPy不会像Python那样自动提升精度溢出是静默发生的。处理传感器数据时建议统一用float64或者明确检查数据范围避免这种隐蔽的bug。和机器人开发的联系在机器人开发中NumPy的使用场景非常多。传感器数据处理——激光雷达的扫描数据就是一个Nx2或Nx3的数组用NumPy做滤波、变换非常方便。坐标变换——旋转矩阵、平移向量都是NumPy数组矩阵乘法一步搞定。轨迹生成——用linspace生成时间序列用向量化运算计算每个时刻的位置。后面聊Eigen的时候我们用过C做这些运算。在Python里NumPy就是Eigen的替代品。区别是NumPy更快原型开发阶段Eigen更适合生产部署。说到性能优化面试中经常被问到的一点是为什么NumPy比纯Python快核心原因有三个一是连续内存带来的缓存友好性二是向量化操作避免了Python解释器的循环开销三是底层C实现使用了高度优化的BLAS库。理解了这三点面试时回答这个问题就不会只停留在因为用C写的这个表面答案了。给正在准备面试的你NumPy在Python面试中属于中等频率考点。建议你至少掌握数组创建、reshape、切片、广播、基本的矩阵运算。这些是后续学pandas、Matplotlib、PyTorch的基础。下篇NumPy进阶——矩阵运算与机器人运动学计算。我们会用NumPy来实现一些机器人学中的经典计算比如旋转矩阵、四元数转换、正运动学。如果这篇文章对你有帮助欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。「机器人软件开发面试·从入门到精通」连载系列上一篇第70篇 Python文件与数据处理——CSV/JSON/YAML的读写 下一篇预告第72篇 NumPy进阶——矩阵运算与机器人运动学计算有任何问题欢迎评论区留言我会尽量回复。

相关新闻

【企业级AI ROI评估框架V3.2】:经27家 Fortune 500 验证,3天完成从部署到收益建模

【企业级AI ROI评估框架V3.2】:经27家 Fortune 500 验证,3天完成从部署到收益建模

更多请点击: https://codechina.net 第一章:AI工具 ROI计算方法 衡量AI工具投入产出比(ROI)不能仅依赖传统软件采购模型,而需结合自动化增益、人力替代效率、错误率下降带来的隐性成本节约等多维指标。核心公式为&…

2026/10/9 17:17:57 阅读更多 →
为什么SunnyUI是C WinForm开发的现代化救星?

为什么SunnyUI是C WinForm开发的现代化救星?

为什么SunnyUI是C# WinForm开发的现代化救星? 【免费下载链接】SunnyUI SunnyUI.NET 是基于.NET Framework 4.0、.NET6、.NET8、.NET9 框架的 C# WinForm UI、开源控件库、工具类库、扩展类库、多页面开发框架。 项目地址: https://gitcode.com/gh_mirrors/su/Sun…

2026/10/10 6:51:09 阅读更多 →
为什么选择Larq?探索二值化神经网络在资源受限设备上的强大优势

为什么选择Larq?探索二值化神经网络在资源受限设备上的强大优势

为什么选择Larq?探索二值化神经网络在资源受限设备上的强大优势 【免费下载链接】larq An Open-Source Library for Training Binarized Neural Networks 项目地址: https://gitcode.com/gh_mirrors/la/larq Larq是一个开源深度学习库,专为训练具…

2026/10/10 6:51:52 阅读更多 →

最新新闻

代码级对抗攻击:AST扰动如何绕过SAST与CI门禁

代码级对抗攻击:AST扰动如何绕过SAST与CI门禁

1. 这不是“黑客炫技”,而是代码层攻防的日常切片“Code-Level Adversarial Attacks 相关工作”——看到这个标题,很多人第一反应是:又一个AI安全论文里的抽象概念?其实不然。它背后是一群人在真实代码世界里反复拆解、注入、绕过…

2026/10/12 5:44:22 阅读更多 →
自然数立方与连续奇数之和:推导证明与Python验证

自然数立方与连续奇数之和:推导证明与Python验证

任何一个自然数 m,它的立方都可以写成 m 个连续奇数之和。这句话我第一次读到时,第一反应是:真的假的?当时正好在翻等差数列求和公式,索性拿纸笔列了一串奇数:1、3、5、7、9、11、13、15、17、19、21……然…

2026/10/12 5:44:22 阅读更多 →
最新Nessus2026.10.8版本主机漏洞扫描/探测工具Windows/Linux

最新Nessus2026.10.8版本主机漏洞扫描/探测工具Windows/Linux

前言 Nessus号称是世界上最流行的扫描程序,全世界有超过75000个组织在使用它。该工具提供完整的电脑扫描服务,并随时更新其数据库。Nessus不同于传统的扫描软件,Nessus可同时在本机或远端上遥控,进行系统的分析扫描。对应渗透测试…

2026/10/12 5:44:22 阅读更多 →
psutil详解:用Python搞定CPU、内存与进程监控

psutil详解:用Python搞定CPU、内存与进程监控

前阵子公司一台线上服务CPU突然飙到100%,我用系统自带的任务管理器看了半天,除了一个pid能锁定,剩下的信息全靠猜。后来发现这个进程是哪个服务的、占了多少内存、网络连了哪里,全是黑盒。那次之后我花了两天把psutil完整过了一遍…

2026/10/12 5:44:22 阅读更多 →
编程循环控制核心:break与continue用法详解与多语言实战对比

编程循环控制核心:break与continue用法详解与多语言实战对比

做开发这几年,几乎每个项目里都会碰上循环控制的问题。for 循环本身很简单,真正让新手挠头、让老手翻车的,往往是循环体里的那两个关键字:break 和 continue。很多新手写循环,要么不敢用 break 导致白白跑完全部数据&a…

2026/10/12 5:44:22 阅读更多 →
mediamtx v1.21.2发布:UDP、JWT、RTSP、RTMP、HLS、WebRTC全面修复,稳定性与安全性再提升

mediamtx v1.21.2发布:UDP、JWT、RTSP、RTMP、HLS、WebRTC全面修复,稳定性与安全性再提升

2026年10月10日,mediamtx 发布 v1.21.2 最新版本。本次更新以“修复与改进”为主,覆盖通用逻辑、API、Media-Over-QUIC、RTSP、RTMP、HLS、WebRTC 以及依赖库升级等多个方向。 v1.21.2 没有引入新的功能模块,而是集中处理实际运行中可能出现的…

2026/10/12 5:43:21 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →