python里numpy实现加减乘除与普通加减乘除有什么不同_Python数据分析--1.3NumPy中四则运算、四则比较运算和广播运算...

在前面的课程中我们提到过使用NumPy能够非常便捷的进行一些运算,从本节课开始我们将会逐渐的对这些运算进行深入的学习。

在以前,我们如果要对两个同形状的数组进行对应位置的四则运算时,我们必须要对两个数组进行循环处理,代码量上来说并不少,并且容易出错。

有了NumPy之后,这些运算将会变的非常的简单。

四则运算

先回顾下Python中有哪些算数运算符吧。

老规矩,先上一段代码,然后再对着代码进行讲解。

import numpy as np

arr1=np.array([11,12,13])

arr2=np.array([21,22,23])

arr3=np.array([31,32,33])

#Numpy四则运算有两种方法

#第一种就是使用数学操作符号

print(arr1+arr2)

print(arr1+arr2+arr3)

print(arr1-arr2)

print(arr1-arr2-arr3)

print(arr1*arr2)

print(arr1/arr2)

#第二种就是使用以下方法

print(np.add(arr1,arr2))

print(np.add(np.add(arr1,arr2),arr3))

print(np.subtract(arr1,arr2))

print(np.multiply(arr1,arr2))

print(np.divide(arr1,arr2))

结果为:

[32 34 36]

[63 66 69]

[-10 -10 -10]

[-41 -42 -43]

[231 264 299]

[0.52380952 0.54545455 0.56521739]

[32 34 36]

[63 66 69]

[-10 -10 -10]

[231 264 299]

[0.52380952 0.54545455 0.56521739]

除了四则运算,在学习Python基础时,所学习的取余数、整除、幂运算等都是支持的。

对应的运算符号就是%、//、**。可以自己试试哦。

下面我们要学习的知识点叫做比较运算

回顾下Python中有哪些比较运算符吧。

比较运算

我们依然是从代码中理解这些运算吧。

import numpy as np

arr1=np.array([11,12,13])

arr2=np.array([21,22,23])

#Numpy比较运算有两种方法

#第一种就是使用数学操作符号

print(arr1>arr2)

print(arr1>=arr2)

print(arr1

print(arr1<=arr2)

print(arr1==arr2)

print(arr1!=arr2)

#第二种就是使用以下方法

print(np.greater(arr1,arr2))

print(np.greater_equal(arr1,arr2))

print(np.less(arr1,arr2))

print(np.equal(arr1,arr2))

print(np.not_equal(arr1,arr2))

结果为:

[False False False]

[False False False]

[ True True True]

[ True True True]

[False False False]

[ True True True]

[False False False]

[False False False]

[ True True True]

[False False False]

[ True True True]

从结果上看,运用比较运算符可以返回布尔类型的值,也就是True和False。

那我们什么时候会用到这样的运算呢?

第一种情况是从数组中查询满足条件的元素,第二种情况是根据判断的结果执行不同的操作。我们还是用代码来看一下具体是怎么一回事吧

import numpy as np

arr1=np.array([23,12,25])

arr2=np.array([21,15,23])

print(arr1[arr1>arr2])

print(arr1[arr1>24])

print(np.where(arr1>24,0,arr1))

print(np.where(arr2>16,1,0))

结果为:

[23 25]

[25]

[23 12 0]

[1 0 1]

广播运算

你有可能注意到了一个细节,上面我们所有的运算都是基于相同形状的数组,那么当数组形状不同时,能够让它们之间进行运算吗

答案肯定是可以的啦,这种情况我们把它叫做广播运算。

以上代码的结果为:

[[ 0 1 2 3]

[ 4 5 6 7]

[ 8 9 10 11]]

[[101 102 103 104]

[105 106 107 108]

[109 110 111 112]]

这里由于维度一致,所以没有用到广播运算:

[[101 103 105 107]

[109 111 113 115]

[117 119 121 123]]

============================================================

我是arr1:[[[ 0 1 2]

[ 3 4 5]

[ 6 7 8]

[ 9 10 11]]

[[12 13 14]

[15 16 17]

[18 19 20]

[21 22 23]]

[[24 25 26]

[27 28 29]

[30 31 32]

[33 34 35]]

[[36 37 38]

[39 40 41]

[42 43 44]

[45 46 47]]

[[48 49 50]

[51 52 53]

[54 55 56]

[57 58 59]]]

我是arr2:[[ 0 1 2]

[ 3 4 5]

[ 6 7 8]

[ 9 10 11]]

维数不一致,但是末尾的维度值是一致的:

[[[ 0 2 4]

[ 6 8 10]

[12 14 16]

[18 20 22]]

[[12 14 16]

[18 20 22]

[24 26 28]

[30 32 34]]

[[24 26 28]

[30 32 34]

[36 38 40]

[42 44 46]]

[[36 38 40]

[42 44 46]

[48 50 52]

[54 56 58]]

[[48 50 52]

[54 56 58]

[60 62 64]

[66 68 70]]]

============================================================

我是arr1:[[[ 0 1 2]

[ 3 4 5]

[ 6 7 8]

[ 9 10 11]]

[[12 13 14]

[15 16 17]

[18 19 20]

[21 22 23]]

[[24 25 26]

[27 28 29]

[30 31 32]

[33 34 35]]

[[36 37 38]

[39 40 41]

[42 43 44]

[45 46 47]]

[[48 49 50]

[51 52 53]

[54 55 56]

[57 58 59]]]

我是arr2:[[0]

[1]

[2]

[3]]

维数不一致,维度值也不一致的,但维度值至少有一个为1:

[[[ 0 1 2]

[ 4 5 6]

[ 8 9 10]

[12 13 14]]

[[12 13 14]

[16 17 18]

[20 21 22]

[24 25 26]]

[[24 25 26]

[28 29 30]

[32 33 34]

[36 37 38]]

[[36 37 38]

[40 41 42]

[44 45 46]

[48 49 50]]

[[48 49 50]

[52 53 54]

[56 57 58]

[60 61 62]]]

============================================================

我是arr1:[[ 0 1 2]

[ 3 4 5]

[ 6 7 8]

[ 9 10 11]]

我是arr2:[1 2 3]

arr2会自动补齐成为1行3列的数组进行运算:

[[ 1 3 5]

[ 4 6 8]

[ 7 9 11]

[10 12 14]]

no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=

我是arr1:[[[ 0 1 2]

[ 3 4 5]

[ 6 7 8]

[ 9 10 11]]

[[12 13 14]

[15 16 17]

[18 19 20]

[21 22 23]]

[[24 25 26]

[27 28 29]

[30 31 32]

[33 34 35]]

[[36 37 38]

[39 40 41]

[42 43 44]

[45 46 47]]

[[48 49 50]

[51 52 53]

[54 55 56]

[57 58 59]]]

我是arr2:[[0 1]

[2 3]

[4 5]

[6 7]]

---------------------------------------------------------------------------

ValueError Traceback (most recent call last)

in

34 print("我是arr1:{}".format(arr1))

35 print("我是arr2:{}".format(arr2))

---> 36 print("不能做运算:\n{}".format(arr1+arr2))

ValueError: operands could not be broadcast together with shapes (5,4,3) (4,2)

补充:在数学中,矩阵的维数就是矩阵的秩,矩阵的秩就是矩阵中非零子式的最高阶数。简单来说,就是把矩阵进行初等行变换之后有非零数的行数。

维数是对形状的描述,红框是维数是3,绿框维数是2,红框第一维的维度值是5,第二维的维度值是4以此类推。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值