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

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

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

机器学习和数据分析变得越来越重要,但在学习和实践过程中,常常因为不知道怎么用程序实现各种数学公式而感到苦恼,今天我们从数学公式的角度上了解下,用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 就更容易了

    推荐阅读
  • 梦见自己坐牢是什么征兆(梦见自己坐牢的寓意)

    下面内容希望能帮助到你,我们来一起看看吧!梦见自己坐牢是什么征兆梦见自己坐在牢里,表示最近有机会很困境中站起来,有重新出发的机运,要好好把握最近的时机。男人梦见自己坐牢了,预示着自己的生活会很幸福。女人梦见自己坐牢,预示着可能会有一段完美的爱情。打算出门的人梦见自己坐牢了,建议如期出外平安。谈婚论嫁的人梦见自己坐牢了,说明经过一段口角而后重新建立感情。

  • 奇葩谐音梗组名搞笑(盘点那些奇葩名字的谐音梗)

    快来看看这个吧,我来为大家讲解一下关于奇葩谐音梗组名搞笑?奇葩谐音梗组名搞笑现在,越来越多的家长在给孩子起名字时因谐音闹出很多笑话。“我爹”“你爹是干什么的”“开种猪厂的!”“002号”一个女生站起来“报告老师,我姓张,我叫张德开。”“是我爸,他是卖钳子的。”老师已经有点站不稳了。“007号”“老师,我姓梅,叫梅良心。”老师已经感到天旋地转了。“我姓吴,叫吴晴。”口喷鲜血,倒地气绝.

  • 曝赵文卓夫妇孕照(赵文卓夫妇现身被疑怀三胎)

    曝赵文卓夫妇孕照据全明星探报道,赵文卓与妻子张丹露日前被拍到现身咖啡馆,女方孕肚明显,似乎已经怀上第三胎,此前两人已育有一子一女。2006年6月,赵文卓与妻子张丹露结婚。2007年9月24日,女儿赵紫阳在美国出生,2011年7月15日,儿子赵子龙在香港出生。赵文卓老婆张丹露个人资料赵文卓老婆张丹露1980年2月28日出生于沈阳,中国内地女演员,毕业于中国戏曲学院。2006年6月,张丹露与赵文卓登记结婚,之后退出娱乐圈,在家主持内务。

  • 酸萝卜汤怎么做(做酸萝卜汤的步骤)

    萝卜去皮切丝香菜洗净小切段备用葱切碎,现在小编就来说说关于酸萝卜汤怎么做?下面内容希望能帮助到你,我们来一起看看吧!酸萝卜汤怎么做萝卜去皮切丝。锅中放入少量的植物油,爆香花椒。下入葱碎炸香捞出。放入少量的酱油继续煸炒加入水,煮至萝卜丝透明。取一大碗,加入鸡精、白胡椒粉、醋、香油拌均匀。把煮至好的萝卜汤倒入大碗里,搅拌均匀,撒上香菜即可。

  • 什么是标准溶液(标准溶液是什么)

    什么是标准溶液标准溶液是指含有某一特定浓度的参数的溶液,比如Cl或Fe的标准溶液。当用标准溶液代替样品进行测试时,得到的结果应该与已知标准溶液的浓度相符。Hach公司拥有多种浓度在大部分测试范围内的标准溶液。这样的标准溶液包括硫化氢、二氧化氯、溶解氧和臭氧。不同浓度的标准溶液可以用来绘制校准曲线,从而可以用得到的校准曲线反查测试样品的浓度。

  • 银行贷款逾期几天会起诉?(银行贷款逾期几天会起诉)

    银行向法院起诉处理的,人民法院作出判决后,借款人应当积极履行还款义务,拒不履行的,银行可向法院申请强制执行,法院在此期间会查封、扣押借款人的财产。在贷款债务人逾期没有偿还银行的贷款本金和利息的时候,此时贷款银行可以采取一系列的措施来处理,比如说通过打电话、发短信等方式来催收,如果是情节严重的,贷款银行还可以向当地的人民法院提起诉讼,请求人民法院判决偿还债务。

  • 多肉越养越瘦的原因有哪些(多肉为什么越养越瘦呢)

    小幼苗多肉植物,新买的多肉植物,最好先生根,只有在根系生长较强时,才能控制栽培。如果土壤不透气,很容易结合,水一浇水就容易浇水,多肉容易腐烂,导致多肉植物死亡。多肉植物病虫害多肉植物病虫害也是一个大问题,以黑腐为例,多肉出现黑腐,几天内就会枯萎。多肉较易生鳞片虫,鳞翅目昆虫会以多汁植物的汁液为食,也很容易聚集在叶子和其他地方,以致新芽死亡,不能长出新芽。鳞翅目昆虫也容易传播黑腐,导致多肉植物死亡。

  • 朝花夕拾藤野先生好词好句(这些好词好句一定要知道)

    朝花夕拾藤野先生好词好句?下面内容希望能帮助到你,我们来一起看看吧!也有解散辫子,盘得平的,除下帽来,油光可鉴,宛如小姑娘的发髻一般,还要将脖子扭几扭。上野的樱花烂漫的时节,望去确也像绯红的轻云。第二年添教霉菌学,细菌的形状是全用电影来显示的,一段落已完而还没有到下课的时候,便影几片时事的片子,自然都是日本战胜俄国的情形。进来的是一个黑瘦的先生,八字须,戴着眼镜,挟着一迭大大小小的书。

  • 结婚后出轨的总裁小说(小说如果进了这里)

    结婚后出轨的总裁小说慕安安的身子微怔,这已经不是厉景晟第一次提出这样的要求。许久没有得到慕安安的回答,厉景晟的心底闪过一丝的不安。倒也是难得,厉景晟竟然夸她聪明。厉景晟将剩下的文件带回苏苑处理。厉景晟的脸色越发的淡漠,眸色变得幽深,与慕安安的目光相接着,薄唇动了动,有些话终究是没有说出口。厉景晟琢磨着这三个字,无疑这三个字是触了他的雷区。厉景晟的双眸阴沉得厉害,慕安安连心跳都快了几拍。

  • 蒜蓉蛏子怎样烧(家常菜之蒜蓉炒蛏子)

    蛏子的内脏,如果不取出,口感非常差,还有一股腥味。蒜蓉炒蛏子所需食材:蛏子800克,蒜头50克,小葱1把,姜1块,料酒,盐,糖,蚝油,生粉,花生米(各适量)。制作方法蛏子初步处理好。锅里放入清水,放入蛏子和葱段,姜片,料酒,烧开后捞出蛏子,挑出姜葱。倒入蛏子翻炒,加入料酒继续炒2分钟。例如5个人,蛏子的量是1300克以上。小贴士:这次蒜头的用量较大,有50克之多。