肥宅钓鱼网
当前位置: 首页 钓鱼百科

numpy 计算的函数(干掉公式numpy)

时间:2023-07-02 作者: 小编 阅读量: 4 栏目名: 钓鱼百科

机器学习和数据分析变得越来越重要,但在学习和实践过程中,常常因为不知道怎么用程序实现各种数学公式而感到苦恼,今天我们从数学公式的角度上了解下,用python实现的方式方法。numpy虽然是针对复杂数据结构构造的,但它提供了和简单数值计算一样方便的操作。实际是因为在开始学习线性代数时,直接从公式定理开始,而没有了解它的原理和来源。用numpy就简单很多:x*2,就像做标量运算一样,感觉向量同一个数值一样。

机器学习和数据分析变得越来越重要,但在学习和实践过程中,常常因为不知道怎么用程序实现各种数学公式而感到苦恼,今天我们从数学公式的角度上了解下,用 python 实现的方式方法。

友情提示:不要被公式吓到,它们都是纸老虎

关于 Numpy

NumPy 是使用 Python 进行科学计算的基础软件包。除其他外,它包括:

  • 功能强大的N维数组对象
  • 精密广播功能函数
  • 集成 C/C 和Fortran 代码的工具
  • 强大的线性代数、傅立叶变换和随机数功能

机器学习和数据分析,numpy 是最常用的科学计算库,可以用极简的、符合思维习惯的方式完成代码实现,为学习和实践提供了很大的便利

环境准备

创建虚拟环境(可省略),安装 numpy 包:

pip install numpy

测试安装:

>>> import numpy>>>

在下面实践中,默认将 numpy 引用为 np:

import numpy as np...

基础运算

编程语言大多数运算都是针对简单数值的,复杂运算是通过相应的数据结构结合程序逻辑计算的。numpy 虽然是针对复杂数据结构(例如矩阵)构造的,但它提供了和简单数值计算一样方便的操作。

幂运算

幂运算的运算符为 ** ,即两个星号(一个星号表示乘),例如计算 x 的平方: x**2 ,x 的立方: x**3 ,等等

开方,相当于计算 1/2 次方,即 x**(1/2) 或者 x**0.5 ,因为常用 numpy 提供了便捷函数, sqrt ,例如对数字 x 开平方,就是 np.sqrt(x) .

实际上平方运算也有便捷方法: np.square

绝对值

绝对值表示一个数轴上的值距原点的距离,表示为 |x| ,numpy 提供便捷方法 abs 来计算,例如 np.abs(x) ,就为 x 的绝对值

理解向量和矩阵

线性代数是机器学习和数据分析的基础数学之一,而向量和矩阵式又是线性代数的基础概念,所以理解向量和矩阵非常重要。

向量

一般数据被分为标量和向量,标量比较容易理解,即数轴上的一个数值

向量直观的认识是一组数值,可以理解为一维数组,但是为啥常见定义表示:具有方向的数值,方向指的是啥?这个问题困扰了我很多年(苦笑)。实际是因为在开始学习线性代数时,直接从公式定理开始,而没有了解它的原理和来源。

向量的方向指的是,向量所在坐标系的原点指向该向量在坐标系中表示的点的方向,例如在平面直角坐标系中,向量 [1,2] 表示 x 轴为 1,y 轴为 2 的一个点,从原点,即 [0,0] 点指向这个点的方向,就是这个向量的方向,扩展的三维坐标系,再到 n 为坐标系(当然超过三位人类就比较难以理解了),向量元素的个数表示向量属于几维坐标系,但无论多少维,都可以画出原点指向向量点的方向。

因为线性代数研究的是向量及向量组(矩阵)的纯数学计算,所以丢弃了坐标系的概念,只保留了向量的样子,所以造成了向量难以理解的现象。

简单说,向量就是一个数值的数组。

矩阵

理解了向量,矩阵理解起来就容易了,相当于一组向量,即坐标系中的多个点的集合,矩阵运算,就相当于多个向量的运算或变换。

可能这里比较绕或冗余,先解释到这里,后面的文章中会进一步解释向量和矩阵的实际意义

初始化

numpy 中,提供了多种产生向量和矩阵的方法,例如用 array 可以将 python 数组初始化为 numpy 矩阵:

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

就可以创建一个 向量维度为 3,个数为 3 的矩阵

基本运算

numpy 特别擅长处理向量和矩阵的运算,例如乘法,即给向量中的每个数值乘以乘数,之间写代码的话,可以遍历向量,为每个值乘以乘数。

用 numpy 就简单很多: x * 2 ,就像做标量运算一样,感觉向量同一个数值一样。

x 2x-2x/2

矩阵幂运算

向量、矩阵既然可以看成一个数,幂运算就很容易理解了,例如矩阵

m 平方就可以写成 m**2 , 结果为:

矩阵点积

不同维度的矩阵可以做乘法操作,但不是一般的乘法操作,操作被称为点积,为了用 numpy 表示,需要用 dot 函数,例如矩阵 m 和 n

代码为 m.dot(n) ,就会得到如下结果:

求和与连乘

统计学公式中,求和运算很常见,例如对矩阵求和:

表示对矩阵 m 中所有元素进行求和,nunpy 通过 sum 完成计算: m.sum()

连乘和求和类似,将矩阵中所有元素做乘积运算:

numpy 通过 prod 完成计算,如矩阵 m 的连乘为 m.prod()

实践

了解了上面的各种基础运算后,做些实践

计算均值

向量均值公式为:

分析公式,其中 n 为向量 x 的元素数量,numpy 的向量,通过 size 获取,后面是向量求和,用 sum 完成,最后代码如下:

(1/x.size)*x.sum()

或者

x.sum()/x.size

实现 Frobenius 范数

现在来个复杂点的,Frobenius 范数,公式如下:

先不用纠结 Frobenius 公式的意义,我们只看如何用 python 实现,分析公式,可以看到,首先对矩阵的每个元素做平方运算,然后求和,最后对结果进行开方,那么就从里向外写

矩阵元素求和,根据前面所述,写成 m**2 ,会得到新的矩阵,然后求和,直接可写为:

np.sqrt((m**2).sum())

借助 numpy 实现公式,极为简洁。

样本方差

我们在看一个公式:

其中

表示向量 x 的均值,上面计算过,那么套用起来就是:

np.sqrt(((x-(x.sum()/x.size))**2).sum()/(x.size-1))

基本依据上面了解的写法可以理解和写出,不过括号有点多,如果不参考公式,估计看不清实现的啥,好在 numpy 将均值运算通过 mean 方法简化了,例如向量 x 的均值,可以写为: np.mean(x) ,所以上面的代码可以简化为:

np.sqrt(((x-np.mean(x))**2).sum()/(x.size-1))

上面公式实际上是样本标准差公式,对于标准差,numpy 提供了简便方法 std, 直接用 np.std(x) 就可以计算,当然现在我们根据标准差公式:

很容易写出来 numpy 实现,赶紧试试吧。

欧拉距离

前面写模拟疫情扩散时,用到了欧拉距离,当时没有理解好 numpy 公式表达能力,所以计算时分了三步,现在如果要计算两个向量之间的欧拉距离,一行代码就能搞定,先复习下欧拉距离公式,向量 a 与 向量 b 的欧拉距离为:

numpy 实现为:

np.sqrt(((a-b)**2).sum())

由于欧拉距离应用广泛,所以 numpy 在线性代数模块中实现了,所以了解 numpy 实现数学公式的方法后,可以简化为:

np.linalg.norm(a-b)

总结

numpy 是个博大精深的数学计算库,是 python 实现科学计算的基础,今天我们从数学公式的角度,了解了如何转换为 numpy 的代码实现,限于篇幅,虽然仅是 numpy 的冰山一角,但却可以成为理解 numpy 运算原理的思路,在数据分析或者机器学习,或者论文写作过程中,即使不了解 numpy 中简洁的运算,也可以根据数学公式写出代码实现,进而通过实践学习和了解 numpy 就更容易了

    推荐阅读
  • 河北为什么叫燕赵大地(河北省地理位置)

    大部分地区属古冀州,所以简称冀。河北位于华北地区,地跨北纬36度03分—42度40分,东经113度27分—119度50分之间。河北位于首都北京周围,并与天津市毗连。河北东部濒临渤海,东南部和南部与山东、河南两省接壤,西部隔太行山与山西省为邻,西北部和东北部同内蒙古自治区、辽宁省相接,总面积18.77万平方公里,总人口约7600万人。河北是东部地区与关内各省区联系的通道,还是山西、内蒙和广大西北地区通往首都和沿海港口的必经之路。

  • 暗黑破坏神新赛季有什么可玩的(网易急了跳票一个月后)

    据悉,《暗黑破坏神:不朽》是暴雪娱乐与网易联合出品的一款暗黑IP手游。而前作暗黑破坏神3,发行至今已有10年。今年6月3日,《暗黑破坏神:不朽》国际服正式上线,口碑持续下跌。有业内人士分析称,《暗黑破坏神:不朽》在网易内部一度被寄予厚望。6月19日晚间,游戏官方网站发布延期公告,原定于6月23日上线的《暗黑:不朽》计划推迟。与此同时,游戏的官方微博也因违法相关法律而禁言,直到现今还未恢复。

  • 排骨怎么腌制(腌制排骨的方法)

    将排骨件用清水冲净,控干水分后,加入2两小苏打,用手揉搓,使小苏打充分与排骨接触,然后加入适量的水,水量以刚好能没过排骨为宜。30分钟后,将浸泡过小苏打的排骨放在水龙头下开最大水冲,大约冲20分钟。目的是将小苏打的涩味冲掉。将盐、味精、生粉、吉士粉、小苏打用一点水调合、溶解,倒在排骨上,然后用手搅拌、揉搓排骨,使调料充分附着于排骨,直至吸收。将鸡蛋黄打散后,倒在排骨上,继续搅拌。

  • 2020重庆巴南东温泉猕猴桃采摘攻略(重庆猕猴桃基地在哪里)

    说完了采摘,我们再来说说这里的另一种游玩乐趣——垂钓,金合园内拥有5个水质清澈的鱼塘,养殖了大量优质生态鱼,老板不允许往鱼塘投饲料,虽然影响了鱼儿的生长速度,但保留了鱼肉的卓越品质,且能够让钓者体验惊喜连连,感受垂钓带来的成就感和收获感。

  • 冬瓜馅菜饼(冬瓜馅菜饼的制作方法)

    接下来我们就一起去研究一下吧!冬瓜馅菜饼面粉烫三分之一,稍晾加冷水合成面团,饧15分钟。冬瓜擦丝挤去部分水分,虾皮1洗一下,木耳、香葱、韭菜切末。油烧热,放入蛋液炒碎盛出,粉丝冲一下甩干水分放炒鸡蛋的余油中中火炒干、压碎。所以原料拌匀,最后放盐调匀。面团分成小剂子擀成薄饼,取一份馅放在饼的一边、另一边折过去,用手稍压整平,用碗沿沿弧形一边压去多余的饼皮。电饼铛烧热,烙至两面金黄。

  • 掰一掰大暑节气的民俗和养生(掰一掰大暑节气的民俗和养生有什么)

    饮食习俗大致分为两种:一种是吃凉性食物消暑,一种是吃热性食物进补。“仙草”又名凉粉草、仙人草,是重要的药食两用植物。由于其神奇的消暑功效,被誉为“仙草”,茎叶晒干后是一种消暑的甜品。其中,以山东单县羊汤最为闻名。同时要多喝水,并在饮食方面多加注意调理。夏季五行为火,对应人的心脏。夏季暑热之时,也是心脏脆弱之际,且容易烦躁不安,心火旺盛,这时最适合多食苦味食物。都是适合在大暑后食用的应季果蔬。

  • 湖南职称评审咨询(湘潭市人社局关于做好2022年度全市职称评审工作的通知)

    中级职称申报参评材料的接收时间以各评审委员会组建单位的通知为准。根据相关规定,全市中级评审结果备案时间为中评会投票表决日加5个公示工作日。因涉嫌经济或其它重大问题正在立案审查尚未结案,或被采取强制措施和受刑事处罚期间的,不得申报参加职称评审。事业单位人员受到行政处分记过或党纪处分严重警告以上处分的,在受处分期间不得申报参加职称评审。要明确审核责任主体,负

  • 北京现代朗动和福克斯哪个好(现代朗动和福睿斯哪个好)

    北京现代朗动和福克斯哪个好在紧凑型车市场,朗东和福克斯都是备受关注的车型。作为顶级车型,这款朗东1.8DLXAT配备了一键启动、ESP车身稳定系统和ECO经济驾驶模式。戈锐是东风本田发布的概念车。朗东还采用了AMS/MDPS等6速自动手动变速箱和节油配置,结合北京现代的主动ECO经济驾驶模式,使得朗东在同级中拥有不错的燃油经济性。本田Gori新车的前进气格栅采用黑色进气格栅设计,与两侧大灯相连。

  • 如何快速的看懂施工图纸(工地新人如何看懂图纸)

    所以弄清各张图纸之间的关系,是看图的重要环节,是发现问题、减少或避免差错的基本措施。②在立面图中,必须掌握门窗洞口的标高尺寸,以便在立皮数杆和预留窗台时不致发生错误。民用建筑由于使用功能不同,也有不同的特点。还可能由于设计人员的疏忽,出现某些漏标、漏注部位。因此施工人员在看图时必须一丝不苟,才能发现此类问题,然后与设计人员共同解决,避免错误的发生。

  • 新车一般出厂日期多久 新车出厂日期多久正常

    但仍建议骑手在车内跑步,在磨合期间尽量避免暴力驾驶。主驾驶位置有踏板和转向柱,应防止脚垫干扰踏板和转向柱。如何查看新车日期:1.帧数:每辆车的车架号都是唯一的,可以根据车架号来判断汽车的生产日期。车架号的第十个字母或数字是指汽车的制造日期,A是10年,B是11年,C是12年,D是13年,E是14年,F是15年,G是16年,H是17年,以此类推,说到A就要到2040年了,汽车车窗玻璃、安全带等配件都有自己的生产日期。