5. 数组的基本运算

本文详细介绍了Numpy库中数组的加法、除法运算,并展示了符号运算与函数运算的等价使用。此外,还涵盖了取余、整除、指数运算以及比较运算。文中通过实例演示了如何取子集以及进行条件操作。最后,阐述了数组的广播运算规则,展示了不同维度数组间的运算。
摘要由CSDN通过智能技术生成

Numpy模块中可以实现数组的基本运算。

#加法运算
math = np.array([12,34,23,56,78,34])
english = np.array([56,67,23,45,12,67])
chinese = np.array([1,2,4,5,23,12])
sum_result1 = math + english + chinese
sum_result2 = np.add(np.add(math,english),chinese)
print('符号加法:',sum_result1)
print('函数加法:',sum_result2)

#除法运算
height = np.array([165,176,167,189,165])
weight = np.array([78,67,45,76,56])
BMI_symbol = weight / (height / 100) ** 2
BMI_fun = np.divide(weight,np.divide(height,100) ** 2)
print('符号除法:',BMI_symbol)
print('函数除法:',BMI_fun)

OUT:
符号加法: [ 69 103  50 106 113 113]
函数加法: [ 69 103  50 106 113 113]
符号除法: [28.65013774 21.62964876 16.13539388 21.27600011 20.56932966]
函数除法: [28.65013774 21.62964876 16.13539388 21.27600011 20.56932966]

四则运算中的符号分别为:”±*/“,对应的函数分别是np.add,np.subtract,np.multiply,np.divide。这些函数只能接受两个对象的运算,需要进行多个对象的计算需要进行嵌套。除了基本的四则运算,还提供以下的计算。

arr7 = np.array([[1,2,10],[10,7,9],[7,3,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)

OUT:
数组arr7:
 [[ 1  2 10]
 [10  7  9]
 [ 7  3  5]]
数组arr8:
 [[2 2 2]
 [3 3 3]
 [4 4 4]]
计算余数:
 [[1 0 0]
 [1 1 0]
 [3 3 1]]
计算整除:
 [[0 1 5]
 [3 2 3]
 [1 0 1]]
计算指数:
 [[   1    4  100]
 [1000  343  729]
 [2401   81  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的元素
#取子集
#从arr7中取出arr7大于arr8的所有元素
import numpy as np
arr7 = np.array([[1,2,10],[10,7,9],[7,3,5]])
arr8 = np.array([[2,2,2],[3,3,3],[4,4,4]])
print('满足条件的二维数组元素的获取:\n',arr7[arr7>arr8])
#从arr9中取出大于10的元素
arr9 = np.array([3,10,23,7,34,5,3,6,8,34,89,9,0])
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))

OUT:
满足条件的二维数组元素的获取:
 [10 10  7  9  7  5]
满足条件的一维数组元素的获取:
 [23 34 34 89]
二维数组的条件操作:
 [[1 2 5]
 [5 7 5]
 [7 3 5]]
一维数组的条件操作:
 [0 0 1 0 1 0 0 0 0 1 1 0 0]

广播运算
前面介绍的各种数学运算符都是针对相同形状的数组,当数组形状不同时,也能够进行数学运算的功能成为数组的广播。但是数组的广播功能也是有规则的,需要满足这些规则:

  • 各输入数组的维度可以不相等,但是必须确保从右到左的对应维度相等。
  • 如果对应维度值不相等,就必须保证其中一个为1。
  • 各输入数组都向其shape最长的数组看齐,shape中不足的部分都通过在前面加1补充。
#各输入数组维度一致,对应维度值相等
import numpy as np
arr10 = np.arange(12).reshape(3,4)
arr11 = np.arange(101,113).reshape(3,4)
print('arr10:\n',arr10)
print('arr11:\n',arr11)
print('3*4的二维矩阵运算:\n',arr10+arr11)

OUT:
arr10:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
arr11:
 [[101 102 103 104]
 [105 106 107 108]
 [109 110 111 112]]
3*4的二维矩阵运算:
 [[101 103 105 107]
 [109 111 113 115]
 [117 119 121 123]]

#各输入数组维度不一样,对应维度值相等
arr12 = np.arange(60).reshape(5,4,3)
print('arr12:\n',arr12)
arr13 = np.arange(12).reshape(4,3)
print('arr13:\n',arr13)
print('维度不一致 但末尾的维度值一致:\n',arr12+arr13)

OUT:
arr12:
 [[[ 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]]]
arr13:
 [[ 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]]]

#各输入的数组维度不一致,对应的维度值不相等,但其中有一个为1
arr12 = np.arange(60).reshape(5,4,3)
arr13 = np.arange(4).reshape(4,1)
print('arr12:\n',arr12)
print('arr13:\n',arr13)
print('维数不一致,维度值也不一致,但维度值至少有一个为1:\n',arr12+arr13)


OUT:
arr12:
 [[[ 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]]]
arr13:
 [[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]]]
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岁月辰星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值