数组的四则运算
在numpy模块中,实现四则运算的计算既可以使用运算符号,也可以使用函数,具体如下例所示:
#加法运算
import numpy as np
math = np.array([98,83,86,92,67,82])
english = np.array([68,74,66,82,75,89])
chinese = np.array([92,83,76,85,87,77])
tot_symbol = math+english+chinese
tot_fun = np.add(np.add(math,english),chinese) #add 加法
print('符号加法:\n',tot_symbol)
print('函数加法:\n',tot_fun)
#除法
height = np.array([165,177,158,169,173])
weight = np.array([62,73,59,72,80])
BMI_symbol = weight/(height/100)**2
BMI_fun = np.divide(weight,np.divide(height,100)**2) #divide 除法
print('符号除法:\n',BMI_symbol)
print('函数除法:\n',BMI_fun)
out:
符号加法: [258 240 228 259 229 248] 函数加法: [258 240 228 259 229 248] 符号除法: [22.77318641 23.30109483 23.63403301 25.20920136 26.7299275 ] 函数除法: [22.77318641 23.30109483 23.63403301 25.20920136 26.7299275 ]
四则运算中的符号分别是“+-*/”,对应的numpy模块函数分别是np.add np.subtract,np.multiply,np.divide.需要注意的是,函数只能接受两个对象的运算,如果需要多个对象的运算,就得使用嵌套方法。如上所示的符号假发和符号的除法。不管是符号方法还是函数方法,都必须保证操作的数组具有相同的形状,除了数组与标量之间的运算(如除法中的身高与100的商)。另外,还有三个数学运算符,分别是余数,整数和指数:
import numpy as np
arr7 = np.array([[1,2,10],[10,8,3],[7,6,5]])
arr8 = np.array([[2,2,2],[3,3,4],[4,4,4]])
print('数组arr7:\n',arr7)
print('数组arr8:\n',arr8)
print('求余计算:\n',arr7 % arr8)
print('整除:\n',arr7 // arr8) #这里面要注意的就是 整除的时候 是 “//”而不是 "/"
print('计算指数:\n',arr7 ** arr8)
out:
数组arr7: [[ 1 2 10] [10 8 3] [ 7 6 5]] 数组arr8: [[2 2 2] [3 3 4] [4 4 4]] 求余计算: [[1 0 0] [1 2 3] [3 2 1]] 整除: [[0 1 5] [3 2 0] [1 1 1]] 计算指数: [[ 1 4 100] [1000 512 81] [2401 1296 625]]
另外还可以使用np.fmod,np.modf和np.power,但是整除的函数应用会稍微复杂一点,需要写成np.modf(arr7/arr8)[1],因为modf可以返回
数值的小数部分和整数部分,而整数部分就是要取的整除值。
比较运算
处理数组的元素之间可以实现上面提到的数学运算,还可以做元素的比较运算。关于比较运算符如下:
符号 | 函数 | 含义 |
> | np.greater(arr1,arr2) | 判断arr1的元素是否大于arr2的元素 |
>= | np.greater_equal(arr1,arr2) | 判断arr1的元素是否大于等于arr2的元素 |
< | np.less(arr1,arr2) | 判断arr1的元素是否小于arr2的元素 |
<= | np.less_equal(arr1,arr2) | 判断arr1的元素是否小于等于arr2的元素 |
== | np.equal(arr1,arr2) | 判断arr1的元素是否等于arr2的元素 |
!= | np.not_equal(arr1,arr2) | 判断arr1的元素是否小等于arr2的元素 |
运用比较运算符可以返回bool类型的值,即True和False。有两种情况会普遍使用到比较运算符,一个是从数组中查询满足条件的元素,另一个是根据判断的结果执行不同的操作。例如:
import numpy as np
arr7 = np.array([[1,2,10],[10,8,3],[7,6,5]])
arr8 = np.array([[2,2,2],[3,3,2],[4,4,4]])
print(arr7)
print('从arr7中取出所有大于arr8的元素',arr7[arr7>arr8]) #取出的是所arr7中对应的元素大于arr8中对应位置的元素
arr9 = np.array([3,10,23,7,15,9,17,22,4,8,16])
print('取出arr9中所有大于10的元素',arr9[arr9>10]) #得到的是一个一维数组 相当于每个数组中的元素都会跟10来进行比较
print(np.greater(arr7,arr8)) #输出的是原数组结构的布尔型元素的数组
out:
[[ 1 2 10] [10 8 3] [ 7 6 5]] 从arr7中取出所有大于arr8的元素 [10 10 8 3 7 6 5] 取出arr9中所有大于10的元素 [23 15 17 22 16] [[False False True] [ True True True] [ True True True]]
广播运算
待续...