四则运算
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)
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)
print('符号除法:\n',BMI_symbol)
print('函数除法:\n',BMI_fun)
四则运算中的符号分别是“+、-、*、/”,对应的numpy模块函数分别是np.add、np.subtract、np.multiply和np.divide。需要注意的是函数只能接受两个对象的运算,如果需要多个对象的运算就需要使用嵌套方法,如上所示。都必须保证操作的数组具有相同的形状,除了数组与标量之间的运算。
arr7 = np.array([[1,2,10],[10,8,3],[7,6,5]])
arr8 = np.array([[2,2,2],[3,3,3],[4,4,4]])
print('数组arr7:\n',arr7)
print('数组arr8:\n',arr8)
# 求余数
print('计算余数:\n',arr7 % arr8)
# 求整除
print('计算整除:\n',arr7 // arr8)
# 求指数
print('计算指数:\n',arr7 ** arr8)
以上运算分别是余数、除数和整数,可以分别用函数np.fmod、np.modf、np.power,但是整数的函数应用会稍微复杂一点,需要写成np.modf(arr7/arr8)[1],其中modf可以返回数值的小数部分和整数部分,而整数部分就是要取的整数值。
比较运算
np.greater(arr1,arr2) #>
np.greater_equal(arr1,arr2) #>=
np.less(arr1,arr2) #<
np.less_equal(arr1,arr2) #<=
np.equal(arr1,arr2) #== 等于
np.not_equal(arr1,arr2) #!= 不等于
例子如下:
# 取子集
# 从arr7中取出arr7大于arr8的所有元素
print(arr7)
print('满足条件的二维数组元素获取:\n',arr7[arr7>arr8])
# 从arr9中取出大于10的元素
arr9 = np.array([3,10,23,7,16,9,17,22,4,8,15])
print('满足条件的一维数组元素获取:\n',arr9[arr9>10])
# 判断操作
# 将arr7中大于7的元素改成5,其余的不变
print('二维数组的条件操作:\n',np.where(arr7>7,5,arr7))
# 将arr9中大于10 的元素改为1,否则改为0
print('一维数组的条件操作:\n',np.where(arr9>10,1,0))
比较运算符可以返回bool类型的值,即true和false。运用bool索引,将满足条件的元素从数组中挑选出来,但不管是一维数组还是多维数组,通过bool索引返回的都是一维数组;np.where函数与Excel中的if函数一样,根据判定条件进行不同的分支。
广播运算
适用于当数组形状不同时使用,但数组的广播功能是用规则的,不满足就会报错。规则如下:1.各输入数组的维度可以不相等,但必须确保从右到左的对应维度值相等。
2.如果对应维度值不相等,就必须保证其中一个为1
3.各输入数组都向其shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐。
# 各输入数组维度一致,对应维度值相等
arr10 = np.arange(12).reshape(3,4)
arr11 = np.arange(101,113).reshape(3,4)
print('3×4的二维矩阵运算:\n',arr10 + arr11)
# 各输入数组维度不一致,对应维度值相等
arr12 = np.arange(60).reshape(5,4,3)
arr10 = np.arange(12).reshape(4,3)
print('维数不一致,但末尾的维度值一致:\n',arr12 + arr10)
# 各输入数组维度不一致,对应维度值不相等,但其中有一个为1
arr12 = np.arange(60).reshape(5,4,3)
arr13 = np.arange(4).reshape(4,1)
print('维数不一致,维度值也不一致,但维度值至少一个为1:\n',arr12 + arr13)
# 加1补齐
arr14 = np.array([5,15,25])
print('arr14的维度自动补齐为(1,3):\n',arr10 + arr14)