首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python第二十八课:NumPy算术运算

Python第二十八课:NumPy算术运算

作者头像
HuangWeiAI
发布2019-07-30 15:51:46
7290
发布2019-07-30 15:51:46
举报
文章被收录于专栏:浊酒清味浊酒清味

当我们建立了NumPy数组之后,对其进行相应的数据处理就变得很重要了,虽然写代码处理不像Excel简单快捷,但是通过学习和实践,可以让你对数据有更加精妙的掌握。这些处理方法包含了数组基本运算加减乘除,还有一些高级运算,比如三角函数,对数等等。

01基础运算

NumPy数组的基本运算,即加减乘除。因为处理对象是数组,学过线性代数的同学可以把它看成矩阵,所以对数组基本运算的规则和平时用到的实数的加减乘除会有一些不同。我们先尝试一些对两个同样大小数组的基础运算:

我们建立了a,b两个一维数组,分别采用直接创建和用arange函数创建的方法,顺手把上一节课的内容复习了一下。对于同样大小的数组之间的加减乘除运算,作用对象是对位元素一一对应。也就是说a的第一个元素和b的第一个元素进行运算,a的第二个元素和b的第二个元素进行运算,以此类推,所有对位的元素进行运算。

运行结果:

从结果我们不难验证上面关于a,b两个数组运算的法则。但是如果a,b两个数组的形状(shape)并不一样,那么运算规则又是什么样子的呢?Numpy对于两个不同形状的数组的运算采用一种叫做广播(broadcast)的机制负责运算:

如果你用print (a.shape)来查看a数组的形状,你就会发现a是一个2*3的数组,而b仅是一个一维数组,他们之间求和本来是没有好的定义的,广播机制会强行让他们获得一个相对合理的结果:

不难发现广播让a中第一个维度[1,2,3]加上b=[0,1,2]之后成为结果的第一个维度,让a中的第二个维度[4,5,6]加上b=[0,1,2]之后成为结果的第二个维度。广播的规律总结起来有以下几点:

(1)让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐。

(2)输出数组的形状是输入数组形状的各个维度上的最大值。

(3)如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。

(4)当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。

用人话讲就是:

对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:

(1)数组拥有相同形状。

(2)当前维度的值相等。

(3)当前维度的值有一个是 1。

若条件不满足,抛出 "ValueError: frames are not aligned" 异常

对于NumPy的广播,我给大家的建议是会多少用多少,尽量不要超出自己知识范围内使用。最后补充一下上面提到的基础运算除了用+-*/来执行,也可以用numpy.add(), numpy.subtract(), numpy.multiply(), 以及numpy. divide()。

02高级运算

我们介绍一些高级运算,比如乘方,三角函数等等:

(1)乘方:我们可以用**2来完成数组元素平方的运算,也可以用numpy.power这种方法来实现,用法是numpy(a,n),其中a是NumPy数组,n是幂,也就是你要做多少次方。

(2)倒数:如果我们想要获得数组每个元素的倒数,那么用numpy.reciprocal()函数可以帮我们完成。

(3)取余:numpy.mod(a,b)可以执行数组a对于数组b除法后取余数。

(4)三角函数:numpy.sin(), numpy.cos(), numpy.tan() 分别执行正弦,余弦,正切三角函数的运算,而numpy.arcsin(), numpy.arccos(), arctan() 分别执行相应的反三角函数运算。

我们看一些例子:

我们建立了a,b两个数组,第一个运算是求a每个元素的平方,分别使用了**2,还有np.power两种方式实现,二者结果相同。第二个运算,我们尝试了一下三角函数中的正弦函数,对a进行了一波操作。最后,我们用数组b对于数组a取余运算,除了11对于2取余等于1之外,其余都是0。

运行结果:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浊酒清味 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档