会numpy学MATLAB,Numpy基础,Python大牛笔记精讲,看了后我连Matlab都学会了! | 码农网...

以前总认为Numpy是渣渣,直到深入接触以后才知道功能这么强大。堪比Matlab啊。果然是人生苦短,我用Python。所以本文作为一个记录&笔记,文章内容大多数取自网络以&官网快速入门等,希望可以帮助大家快速入门Numpy。如果你有Matlab基础,那么你能很快看懂本文!

647257c9f8f2cf9e35303e33c3646df8.png

一个栗子

b0ed5d05831bcb9298627bd66a30a477.png

创建矩阵

对于 Python 中的numpy模块,一般用其提供的ndarray对象。 创建一个ndarray对象很简单,只要将一个list作为参数即可。 例如:

323ac8d3368097ff30c029a9f02031a5.png

矩阵行数列数

370858cded9d0264776b5be5ceaea996.png

3f2558bbd2cf361fa39d8e97741919bf.png

矩阵按行列选取

矩阵的截取和list相同,可以通过[](方括号)来截取

e36caeb54067160ac2bba489f46b09a2.png

矩阵按条件截取

e4dbd784ee8aec33eb122d83198cebe6.png

按条件截取应用较多的是对矩阵中满足一定条件的元素变成特定的值。 例如将矩阵中大于6的元素变成0

39cfc70481e0753b2d4507aa52120988.png

Stacking together different arrays

矩阵的合并可以通过numpy中的hstack方法和vstack方法实现:

cad597f397aedb87e6d3f09238e4f097.png

矩阵的合并也可以通过concatenatef方法。

np.concatenate( (a1,a2), axis=0 ) 等价于 np.vstack( (a1,a2) )

np.concatenate( (a1,a2), axis=1 ) 等价于 np.hstack( (a1,a2) )

通过函数创建矩阵

0932aa77a2c9d3c14e61b403f1e4b5d1.png

arange

17a60e98503b98a680f29cf0656223a1.png

linspace/ logspace

39052f7a979f09d4ebabe4bb9c8d6053.png

ones、zeros、eye、empty

ones创建全1矩阵 ,zeros创建全0矩阵 ,eye创建单位矩阵 ,empty创建空矩阵(实际有值)

0c9f517850211db8327ed9fd34168e84.png

7d2b1ded83fa8379acba1a01c633c982.png

fromstring

fromstring()方法可以将字符串转化成ndarray对象,需要将字符串数字化时这个方法比较有用,可以获得字符串的ascii码序列。

13e3c4caf4f5761e80ff0e75287968db.png

random

546664f77c736d54cd70221cb1dbc138.png

fromfunction

fromfunction()方法可以根据矩阵的行号列号生成矩阵的元素。 例如创建一个矩阵,矩阵中的每个元素都为行号和列号的和。

c24debd3e60af64b012bcd93a531d8cd.png

矩阵的运算

20cf49063f3879c9173dac200e65e2ff.png

常用矩阵运算符

Numpy中的ndarray对象重载了许多运算符,使用这些运算符可以完成矩阵间对应元素的运算。

运算符说明+矩阵对应元素相加-矩阵对应元素相减*矩阵对应元素相乘/矩阵对应元素相除,如果都是整数则取商%矩阵对应元素相除后取余数**矩阵每个元素都取n次方,如**2:每个元素都取平方

042bde152be1751adaabafda24c71a98.png

常用矩阵函数

同样地,numpy中也定义了许多函数,使用这些函数可以将函数作用于矩阵中的每个元素。 表格中默认导入了numpy模块,即 import numpy as np 。a为ndarray对象。

常用矩阵函数说明np.sin(a)对矩阵a中每个元素取正弦,sin(x)np.cos(a)对矩阵a中每个元素取余弦,cos(x)np.tan(a)对矩阵a中每个元素取正切,tan(x)np.arcsin(a)对矩阵a中每个元素取反正弦,arcsin(x)np.arccos(a)对矩阵a中每个元素取反余弦,arccos(x)np.arctan(a)对矩阵a中每个元素取反正切,arctan(x)np.exp(a)对矩阵a中每个元素取指数函数,exnp.sqrt(a)对矩阵a中每个元素开根号

当矩阵中的元素不在函数定义域范围内,会产生RuntimeWarning,结果为nan(not a number)

矩阵乘法(点乘)

矩阵乘法必须满足矩阵乘法的条件,即第一个矩阵的列数等于第二个矩阵的行数。 矩阵乘法的函数为 dot 。

80db1b7955c59ccdd4427c906c38b22b.png

矩阵的转置 a.T

f08010b2a075fd081445704dfa1a1dc2.png

矩阵的转置还有更简单的方法,就是a.T。

ee087bb7a45ac7e9a1c57db128c9a868.png

矩阵的逆

设A是数域上的一个n阶方阵,若在相同数域上存在另一个n阶矩阵B,使得: AB=BA=E。 则我们称B是A的逆矩阵,而A则被称为可逆矩阵。

求矩阵的逆需要先导入numpy.linalg,用linalg的inv函数来求逆。矩阵求逆的条件是矩阵应该是方阵。

c9713d0e9e98331f72706f025f5e02fb.png

矩阵信息获取(如均值等)

最值

获得矩阵中元素最大最小值的函数分别是max和min,可以获得整个矩阵、行或列的最大最小值。

e5d77959dae6b7b96d299b382c7f4498.png

平均值

获得矩阵中元素的平均值可以通过函数mean()。同样地,可以获得整个矩阵、行或列的平均值。

92b6867d4c03ec21e0616462a7a918bf.png

方差

方差的函数为var(),方差函数var()相当于函数mean(abs(x - x.mean())**2),其中x为矩阵。

f7066944fe5ba702ba9b91b494e7a8b9.png

标准差

标准差的函数为std()。 std()相当于sqrt(mean(abs(x - x.mean())**2)),或相当于sqrt(x.var())。

055d8427a5f178761dfb67b983c764b4.png

中值

中值指的是将序列按大小顺序排列后,排在中间的那个值,如果有偶数个数,则是排在中间两个数的平均值。中值的函数是median(),调用方法为numpy.median(x,[axis]),axis可指定轴方向,默认axis=None,对所有数取中值。

9172ae3f2fa298dbe45f4d7335fd8bb0.png

求和

矩阵求和的函数是sum(),可以对行,列,或整个矩阵求和

a111cc8d76c2a350d2b05727428df7bc.png

累积和

某位置累积和指的是该位置之前(包括该位置)所有元素的和。例如序列[1,2,3,4,5],其累计和为[1,3,6,10,15],即第一个元素为1,第二个元素为1+2=3,……,第五个元素为1+2+3+4+5=15。矩阵求累积和的函数是cumsum(),可以对行,列,或整个矩阵求累积和。

f3bde5fff40ae44cf12118da83684e65.png

极差

79b7326741d9f0f7cb2982539b4b0fd6.png

百分位数

b1fb3b3396d9d1f61749540e801ea6d0.png

序号参数及描述1.a 输入数组2.q 要计算的百分位数,在 0 ~ 100 之间3.axis 沿着它计算百分位数的轴

加权平均值

e163a1dbd29ff867cfaf01fc5f38a4fa.png

形状处理

改变数组的形状

57e8cf3e887e59ae596e0e6839b1737d.png

数组的形状可以用以下方式改变。注意,下面的三个命令都返回一个修改后的数组,但不改变原始数组:

9649efe1a6d57d7d0d4b78710880e26f.png

整形函数用修改的形状返回它的参数,而NDARRA.ReSIZE方法修改数组本身:

32a78a0995c4c360ae6212b6439498d7.png

如果在整形操作中给出尺寸为-1,则其他尺寸自动计算:

c739ca37ae3119cce38998ead8ea27c4.png

把一个数组分成几个小数组

使用HSPLE,可以通过指定要返回的等形状数组的数量,或者通过指定在其中发生除法的列来将数组沿水平轴拆分:

8d93d63f41b970f1a6c72173c20d028a.png

拷贝和视图

当操作和操作数组时,它们的数据有时被复制到一个新数组中,有时不被复制。这往往是初学者的困惑源。有三种情况:

根本没有复制品

a = b,改变b就相当于改变a,或者相反。

c5ccc807d02638750f3a55eb9c554a19.png

视图或浅拷贝

不同的数组对象可以共享相同的数据。View方法创建一个新的数组对象,该对象查看相同的数据。

2f38ca96fff4e7b48d208dca310ab559.png

切片数组返回它的视图:

a006ab64eb6f4068152ba9c6c0da5490.png

ef7932a1039c25f51b0ab8cde70fe010.png

深拷贝

复制方法完成数组及其数据的完整复制。

7fe55b835f589472a5642b9881fbef88.png

曼德勃罗

b074846b312afaed7dcf2c80bdd984c3.png

0eafee38d87b78ae0529b6b8bba8f1a9.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值