我是靠谱客的博主 美好帅哥,最近开发中收集的这篇文章主要介绍幂运算 数组_Python数据分析--1.3NumPy中四则运算、四则比较运算和广播运算,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在前面的课程中我们提到过使用NumPy能够非常便捷的进行一些运算,从本节课开始我们将会逐渐的对这些运算进行深入的学习。
在以前,我们如果要对两个同形状的数组进行对应位置的四则运算时,我们必须要对两个数组进行循环处理,代码量上来说并不少,并且容易出错。

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

四则运算

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

3defe61bf59d4ec4610b394d8f895f49.png

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

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基础时,所学习的取余数、整除、幂运算等都是支持的。


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

de37f8a395e1ce457a3c8335d4ba1c65.png

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

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

比较运算

647f323c94d58e928b6e82444040bd2c.png

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

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<arr2)
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]

广播运算

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

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

e46d2c5b298c948cdc3daf4c3bdd63d5.png
以上代码的结果为:

[[ 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)
<ipython-input-3-67f967cbb71b> in <module>
     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) 

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

e1aba94d40f01edfb430c59b4b4ec2a6.png

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

最后

以上就是美好帅哥为你收集整理的幂运算 数组_Python数据分析--1.3NumPy中四则运算、四则比较运算和广播运算的全部内容,希望文章能够帮你解决幂运算 数组_Python数据分析--1.3NumPy中四则运算、四则比较运算和广播运算所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部