手把手教你学Numpy,搞定数据处理——收官篇

【数据分析】Numpy详解 Numpy是什么? NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。 Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。 也开发了另一个包 Numarray ,它拥有一些额外的功能。 2005年,Travis Oliphant 通过将 Numarray 的功能集成到 Numeric 包中来创建 NumPy 包。 这个开源项目有很多贡献者。 1. NumPy - Ndarray 对象 Num 阅读详情

本文始发于个人公众号:TechFlow,原创不易,求个关注


今天是Numpy专题第6篇文章,我们一起来看看Numpy库当中剩余的部分。


数组的持久化


在我们做机器学习模型的研究或者是学习的时候,在完成了训练之后,有时候会希望能够将相应的参数保存下来。否则的话,如果是在Notebook当中,当Notebook关闭的时候,这些值就丢失了。一般的解决方案是将我们需要的值或者是数组“持久化”,通常的做法是存储在磁盘上。

Python当中读写文件稍稍有些麻烦,我们还需要创建文件句柄,然后一行行写入,写入完成之后需要关闭句柄。即使是用with语句,也依然不够简便。针对这个问题,numpy当中自带了写入文件的api,我们直接调用即可。

通过numpy当中save的文件是二进制格式的,所以我们是无法读取其中内容的,即使强行打开也会是乱码。

以二进制的形式存储数据避免了数据类型转化的过程,尤其是numpy底层的数据是以C++实现的,如果使用Python的文件接口的话,势必要先转化成Python的格式,这会带来大量开销。既然可以存储,自然也可以读取,我们可以调用numpy的load函数将numpy文件读取进来。

要注意我们保存的时候没有添加文件后缀,numpy会自动为我们添加后缀,但是读取的时候必须要指定文件的全名,否则会numpy无法找到,会引发报错。

不仅如此,numpy还支持我们同时保存多个数组进入一个文件当中。

我们使用savez来完成,在这个api当中我们传入了a=arr,b=arr,其实是以类似字典的形式传入的。在文件当中,numpy会将变量名和数组的值映射起来。这样我们在读入的时候,就可以通过变量名访问到对应的值了。

如果要存储的数据非常大的话,我们还可以对数据进行压缩,我们只需要更换savez成savez_compressed即可。


线性代数


Numpy除了科学计算之外,另外一大强大的功能就是支持矩阵运算,这也是它广为流行并且在机器学习当中大受欢迎的原因之一。我们在之前的线性代数的文章当中曾经提到过Numpy这方面的一些应用,我们今天再在这篇文章当中汇总一些常用的线性代数的接口。


点乘


说起来矩阵点乘应该是最常用的线代api了,比如在神经网络当中,如果抛开激活函数的话,一层神经元对于当前数据的影响,其实等价于特征矩阵点乘了一个系数矩阵。再比如在逻辑回归当中,我们计算样本的加权和的时候,也是通过矩阵点乘来实现的。

在Andrew的深度学习课上,他曾经做过这样的实现,对于两个巨大的矩阵进行矩阵相乘的运算。一次是通过Python的循环来实现,一次是通过Numpy的dot函数实现,两者的时间开销相差了足足上百倍。这当中的效率差距和Python语言的特性以及并发能力有关,所以在机器学习领域当中,我们总是将样本向量化或者矩阵化,通过点乘来计算加权求和,或者是系数相乘。

在Numpy当中我们采用dot函数来计算两个矩阵的点积,既可以写成a.dot(b),也可以写成np.dot(a, b)。一般来说我更加喜欢前者,因为写起来更加方便清晰。如果你喜欢后者也问题不大,这个只是个人喜好。

注意不要写成*,这个符号代表两个矩阵元素两两相乘,而不是进行点积运算。它等价于np当中的multiply函数。


转置与逆矩阵


转置我们曾经在之前的文章当中提到过,可以通过.T或者是np.transpose来完成。

Numpy中还提供了求解逆矩阵的操作,这个函数在numpy的linalg路径下,这个路径下实现了许多常用的线性代数函数。根据线性代数当中的知识,只有满秩的方阵才有逆矩阵。我们可以通过numpy.linalg.det先来计算行列式来判断,否则如果直接调用的话,对于没有逆矩阵的矩阵会报错。

在这个例子当中,由于矩阵b的行列式为0,说明它并不是满秩的,所以我们求它的逆矩阵会报错。

除了这些函数之外,linalg当中还封装了其他一些常用的函数。比如进行qr分解的qr函数,进行奇异值分解的svd函数,求解线性方程组的solve函数等。相比之下,这些函数的使用频率相对不高,所以就不展开一一介绍了,我们可以用到的时候再去详细研究。


随机


Numpy当中另外一个常用的领域就是随机数,我们经常使用Numpy来生成各种各样的随机数。这一块在Numpy当中其实也有很多的api以及很复杂的用法,同样,我们不过多深入,挑其中比较重要也是经常使用的和大家分享一下。

随机数的所有函数都在numpy.random这个路径下,我们为了简化,就不写完整的路径了,大家记住就好。


randn


这个函数我们经常在代码当中看到,尤其是我们造数据的时候。它代表的是根据输入的shape生成一批均值为0,标准差为1的正态分布的随机数。

要注意的是,我们传入的shape不是一个元组,而是每一维的大小,这一点和其他地方的用法不太一样,需要注意一下。除了正态分布的randn之外,还有均匀分布的uniform和Gamma分布的gamma,卡方分布的chisquare。


normal


normal其实也是生成正态分布的样本值,但不同的是,它支持我们指定样本的均值和标准差。如果我们想要生成多个样本,还可以在size参数当中传入指定的shape。


randint


顾名思义,这个函数是用来生成随机整数的。它接受传入随机数的上下界,最少也要传入一个上界(默认下界是0)。

如果想要生成多个int,我们可以在size参数传入一个shape,它会返回一个对应大小的数组,这一点和uniform用法一样。


shuffle


shuffle的功能是对一个数组进行乱序,返回乱序之后的结果。一般用在机器学习当中,如果存在样本聚集的情况,我们一般会使用shuffle进行乱序,避免模型受到样本分布的影响。

shuffle是一个inplace的方法,它会在原本值上进行改动,而不会返回一个新值。


choice


这也是一个非常常用的api,它可以在数据当中抽取指定条数据。

但是它只支持一维的数组,一般用在批量训练的时候,我们通过choice采样出样本的下标,再通过数组索引去找到这些样本的值。比如这样:


总结


今天我们一起研究了Numpy中数据持久化、线性代数、随机数相关api的使用方法,由于篇幅的限制,我们只是选择了其中比较常用,或者是比较重要的用法,还存在一些较为冷门的api和用法,大家感兴趣的可以自行研究一下,一般来说文章当中提到的用法已经足够了。

今天这篇是Numpy专题的最后一篇了,如果你坚持看完本专题所有的文章,那么相信你对于Numpy包一定有了一个深入的理解和认识了,给自己鼓鼓掌吧。之后周四会开启Pandas专题,敬请期待哦。

如果喜欢本文,可以的话,请点个关注,给我一点鼓励,也方便获取更多文章。

在这里插入图片描述

pandas,matplotlib,numpy详解 python库python库 立即下载

相关推荐

告别Keil/IAR:在VSCode中用CMake+Clangd打造丝滑的STM32开发环境(附完整配置)

本文详细介绍了如何在VSCode中使用CMake和Clangd搭建高效的STM32开发环境,替代传统的Keil/IAR工具。通过完整的配置指南和快速开发技巧,帮助开发者实现轻量级、高度可定制的现代化开发流程,显著提升STM32项目的开发效率。

weixin_26843605的博客 164

numpy详解,小艾笔记

一个在python中做科学计算的基础库,重在数值计算、也是大部分python科学计算库的基础库,多用于大型,多维数组上的科学运算 待更新

m0_47533197的博客 8074

TexGen模型导出到ABAQUS的inp文件:如何快速修改纱线材料属性(避坑指南)

本文针对TexGen模型导出到ABAQUS的inp文件后纱线材料属性缺失或错误的问题,提供了高效的解决方案。文章详细解析了inp文件结构,指导用户如何手动定位并修改纱线材料属性,并提供了可批量处理的Python脚本,帮助用户快速、精准地完成材料参数赋值,有效提升复合材料仿真工作效率。

ice55的博客 599

通俗图解NumPy数据处理方法

NumPy1.向量-一维数组1.1 初始化1.1.1 向量初始化1.1.2 其他初始化向量方法1.1.3 序列数组初始化1.1.4 随机数组初始化1.2 向量索引1.3 向量操作2.矩阵-二维数组2.1 矩阵初始化2.2 轴参数2.3 行向量与列向量2.4 矩阵操作2.5 Meshgrids2.6 矩阵统计2.7 矩阵排序3.三维数组(更高数组) 原文链接:https://www.yanxishe.com/TextTranslation/3198 个人认为也是一个很好的学习网站 1.向量-一维数组 1.1

weixin_42010722的博客 2874

使用STC15F104W产生PWM脉冲

最近的小项目中使用到了STC15F104W产生PWM脉冲

yeats1989的专栏 1万+

数字IC后端PPA优化实战:Timing一致性策略与Module Region布局技巧

本文深入探讨了数字IC后端设计中的PPA优化实战,重点解析了Timing一致性问题及其解决方案。通过调整Clock Uncertainty、Timing Derate和RC Scale Factor等关键参数,使Innovus等PR工具的分析结果更接近PrimeTime签核结果。同时,文章详细介绍了Module Region布局技巧,通过为关键模块划定物理区域,优化单元摆放,有效减少线延迟,从而协同提升时序收敛效率与设计可预测性。

weixin_29218963的博客 202

python对文件的追加写模式_Python对txt文档进行读,写,追加,修改操作(open,pandas,numpy)...

Python对txt文档进行读,写,追加,修改操作上次写了一篇 Python对csv文档进行读,写,追加操作,这次写一篇关于txt的操作。本文将使用open,pandas,numpy三种方式对txt文档进行读,写,追加,在此不推荐使用此方式操作➡ f = open(’test.txt’, ‘w’),因为该方法结束时候需要使用f.close(),如果忘记写close,则可能出现数据丢失的情况1.wi...

weixin_29608135的博客 4617

这才是 Python 的正确玩法!用强化学习 (RL) 训练 AI 玩《王者荣耀》,胜率 90%!

大家打排位时,一定遇到过那种“意识神级、操作零失误”的对手,或者“走位呆滞、送人头”的队友。以前的“人机”是程序员写死的脚本(If 血量<20% Then 回城)。而现在的顶级 AI(如腾讯绝悟、OpenAI Five),是靠强化学习 (Reinforcement Learning)自己“左右互搏”练出来的。今天,我们不谈枯燥的数学公式,我将手把手教你用,搭建一个能玩 MOBA 游戏的 AI Agent。即使不能去 KPL 打职业,虐一下钻石局还是绰绰有余的!

BUG猿的博客 1182

numpy详细教程(涵盖全部,看这一篇就够了)

numpy安装到使用,看这一篇完全够了,不带一点废话

m0_74344139的博客 16万+

YOLOv11改进 | 模型知识蒸馏篇 | 利用模型蒸馏改进YOLOv11进行无损涨点 | 离线蒸馏(附代码 + 完整文件 + 解析教程)

这篇文章给大家带来的最新改进是模型的蒸馏,利用教师模型指导学生模型从而进行模型的涨点,本文的内容不仅可以用于论文中,在目前的绝大多数的工作中模型蒸馏是一项非常重要的技术,所以大家可以仔细学习一下本文的内容,本文从YOLOv8的项目文件为例,进行详细的修改教程,文章内包括完整的修改教程,针对小白我出了视频修改教程,如果你还不会我提供了修改后的文件大家直接运行即可,所以说不用担心不会适用!模型蒸馏真正的无损涨点,蒸馏你只看这一篇文章就足够了!欢迎大家订阅我的专栏一起学习YOLO!

Snu77的博客 4316

从 VL02N 拣配到 ABAP 自动化,读懂 SD_DELIVERY_UPDATE_PICKING 的位置和风险

文章摘要:SAP SD模块中,SD_DELIVERY_UPDATE_PICKING函数模块用于处理出库交货单的拣配确认,更新交货项目的拣配数量。该函数适用于未启用WM/EWM的传统SD流程,能确保拣配状态与标准交货处理逻辑同步,比直接修改数据库更安全。但在S/4HANA Cloud等新环境中,应优先使用API_OUTBOUND_DELIVERY_SRV等公开发布接口。使用该函数时需注意参数完整性和按交货单整体处理的原则,避免逐项提交导致的数据不一致问题。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 243

c++读取numpy数据_手把手教你学Numpy,搞定数据处理——收官篇

今天是Numpy专题第6篇文章,我们一起来看看Numpy库当中剩余的部分。数组的持久化在我们做机器学习模型的研究或者是学习的时候,在完成了训练之后,有时候会希望能够将相应的参数保存下来。否则的话,如果是在Notebook当中,当Notebook关闭的时候,这些值就丢失了。一般的解决方案是将我们需要的值或者是数组“持久化”,通常的做法是存储在磁盘上。Python当中读写文件稍稍有些麻烦,我们还需要创...

weixin_39929723的博客 1628

【华为OD机试】真题-小明减肥(Java)

摘要:题目要求从n个可选运动中选取k个,使其卡路里总和等于目标值t,统计可行方案数。输入包含运动数量n、目标t、选择数量k及卡路里数组。采用DFS回溯算法,通过剪枝优化(提前终止无效分支),分别处理选择/不选当前运动的情况。当遍历完所有运动且满足条件时计数。示例输入"4 3 2"和"1 2 3"时,输出2(对应两种选择组合)。Java实现通过递归完成搜索,最终输出符合条件的方案总数。(149字)

u014481728的博客 280

numpy 索引多个_手把手教你学numpy,从此数据处理不再慌——索引篇

今天是numpy专题的第三篇,我们来聊聊numpy当中的索引。上篇的末尾其实我们简单地提到了索引,但是没有过多深入。没有过多深入的原因也很简单,因为numpy当中关于索引的用法实在是很多,并不是我们想的那样用一个下标去获取数据就完事了。所以我整理了一下相关的用法,把关于索引的使用简单分成了几类,我们一个一个来看。切片索引切片我们都熟悉,用冒号将两个数隔开,表示一个区间的上界和下界。通过这种方式访问...

weixin_39525300的博客 239

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

这样学 2 天搞定 NumPy !

Python与算法社区已原创430篇,干货满满值得星标010203三步加星标NumPy系列已推送以下三篇:图解入门 NumPy,来了!介绍 NumPy 的五种玩法NumPy 100 道练...

算法channel 173

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

过滤一批数据_手把手教你学numpy,从此数据处理不再慌——索引篇

今天是numpy专题的第三篇,我们来聊聊numpy当中的索引。上篇的末尾其实我们简单地提到了索引,但是没有过多深入。没有过多深入的原因也很简单,因为numpy当中关于索引的用法实在是很多,并不是我们想的那样用一个下标去获取数据就完事了。所以我整理了一下相关的用法,把关于索引的使用简单分成了几类,我们一个一个来看。切片索引切片我们都熟悉,用冒号将两个数隔开,表示一个区间的上界和下界。通过这种方式访问...

weixin_42676876的博客 124

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

numpy 索引多个_手把手教你学Numpy教程,从此数据处理不再慌【三】——索引篇...

点击上方蓝字,和我一起学技术。今天是numpy专题的第三篇,我们来聊聊numpy当中的索引。上篇的末尾其实我们简单地提到了索引,但是没有过多深入。没有过多深入的原因也很简单,因为numpy当中关于索引的用法实在是很多,并不是我们想的那样用一个下标去获取数据就完事了。所以我整理了一下相关的用法,把关于索引的使用简单分成了几类,我们一个一个来看。切片索引切片我们都熟悉,用冒号将两个数隔开,表...

weixin_39793434的博客 127

chatgpt赋能python:手把手教Python:从入门到精通

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。

boRRjxBZRf的博客 444

过滤一批数据_手把手教你学numpy,从此数据处理不再慌【三】

本文始发于个人公众号:TechFlow,原创不易,求个关注今天是numpy专题的第三篇,我们来聊聊numpy当中的索引。上篇的末尾其实我们简单地提到了索引,但是没有过多深入。没有过多深入的原因也很简单,因为numpy当中关于索引的用法实在是很多,并不是我们想的那样用一个下标去获取数据就完事了。所以我整理了一下相关的用法,把关于索引的使用简单分成了几类,我们一个一个来看。切片索引切片我们都熟悉,用冒...

weixin_35837926的博客 147

我用3天搞定NumPy,原来Python可以这么玩!

学习编程最重要的是实践。我在学习NumPy时,每天都会花几个小时写代码,尝试解决各种实际问题。比如用NumPy处理真实世界的数据集,或者解决LeetCode上的数组操作题目。通过实践,我对NumPy的理解更加深入。作为一个有10年经验的Java程序员,我曾经以为转型Python会很困难,但通过正确的方法和工具,我只用了3天就掌握了NumPy。放下Java的固有思维,拥抱Python的灵活从NumPy数组开始,逐步掌握核心功能选择适合自己的学习工具,如Jupyter Notebook和PyCharm。

程序员爱酸奶 523

Python3,一篇搞定Numpy与Pandas的差异点及应用场景,妥妥的学到了。

数据分析仪处理,必不可少的技能之:numpy+pandas

商务合作 | 面试培训 | 职场规划 ==>主页扫码 7538

如何轻松搞定Python中的NumPy安装?

在数据科学和机器学习领域,Python无疑是最受欢迎的编程语言之一。而NumPy作为Python的核心库之一,为高效处理大规模数值计算提供了强大的支持。无论是数据预处理、矩阵运算还是图像处理,NumPy都是不可或缺的工具。然而,对于初学者来说,如何顺利安装NumPy库可能是一个不小的挑战。本文将详细讲解如何在不同环境下安装NumPy,让你快速上手,轻松应对各种数据处理任务。

cda2024的博客 2380

chatgpt赋能python:Python列表转numpy:将数据处理与分析提升到新的水平

NumPy是Python的一个强大的开源数学库,主要用于支持大规模多维数组和矩阵计算。NumPy提供了一个快速、高效的数据结构来处理大规模数据集,因此在数据科学和机器学习领域广受欢迎。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。

axuhsssssco的博客 363

NumPy进阶修炼|你真的了解NumPy吗

我的公众号:早起Python ======== 大家好,上周发布的Pandas进阶修炼120题不知道各位做的怎么样,现在NumPy系列也闪亮登场!在上个系列一直让我很遗憾的就是对一些重要的函数没有进一步讲解(当然有读者制作的b站讲解视频填补了这一空缺)。所以在NumPy系列中,为了系统的学习NumPy的各种操作,类似于Pandas120系列的习题肯定少不了,但是还会有一些理论的讲解,我们开始吧...

早起Python 679

chatgpt赋能python:Python中如何导入Numpy?

NumPy是一个Python的开源数值计算库,用于支持大规模多维数组与矩阵运算,包含了许多有用的函数,如傅里叶变换、随机数生成、线性代数、傅里叶系数和卷积等。n维数组(ndarray)复数数组(complex ndarray)各类型数组(dtype)同时,NumPy也提供简单灵活的编程接口,允许开发者轻松地组合和操作各种类型的数据。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。

test100t的博客 2014
上一篇: 博弈论——两人取子游戏与威佐夫博弈,隐藏在背后的黄金分割
下一篇: Golang简易教程——面向对象篇
TechFlow
博客等级 码龄7年 347粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值