【Python数据分析系列5】Numpy学习——数组的基本数学计算(数组比较运算和位运算)

1-数组比较运算

跟python的比较运算类似,都是用于逻辑条件判断。比较运算不外乎就是等于(==)不等于(!=)大于(>)小于(<)大于等于(>=)小于等于(<=)。其实大多程序语言都有这种基础的逻辑判断,今天我们将它运用在我们的numpy数组上。

1.1-数组与数组比较

one8 = np.arange(9).reshape(3, 3)
print('one8= ', one8)

c20 = np.full((3, 3), 2)
print('c20= ', c20)

print('等于(==)比较,one8==c20 = ', one8==c20)  #对应元素相等的返回True,不等返回False

print('不等于(!=)比较,one8!=c20 = ', one8!=c20)  #对应元素不相等的返回True,相等返回False

print('大于(>)比较,one8>c20 = ', one8>c20)  #对应元素前者大于后者的返回True,否则返回False

print('小于(<)比较,one8<c20 = ', one8<c20)  #对应元素前者小于后者的返回True,否则返回False

print('大于等于(>=)比较,one8>=c20 = ', one8>=c20)  #对应元素前者大于等于后者的返回True,否则返回False

print('小于等于(<=)比较,one8<=c20 = ', one8<=c20)  #对应元素前者小于等于后者的返回True,否则返回False

输出:

one8=  [[0 1 2]
 	    [3 4 5]
        [6 7 8]]
c20=  [[2 2 2]
       [2 2 2]
       [2 2 2]]
       
等于(==)比较:
one8==c20 =  [[False False  True]
              [False False False]
              [False False False]]
              
不等于(!=)比较:
one8!=c20 =  [[ True  True False]
 			  [ True  True  True]
  			  [ True  True  True]]
  			  
大于(>)比较:
one8>c20 =  [[False False False]
 			 [ True  True  True]
			 [ True  True  True]]
			 
小于(<)比较:
one8<c20 =  [[ True  True False]
 			 [False False False]
			 [False False False]]
			 
大于等于(>=)比较:
one8>=c20 =  [[False False  True]
			  [ True  True  True]
			  [ True  True  True]]
			  
小于等于(<=)比较:
one8<=c20 =  [[ True  True  True]
 			  [False False False]
 			  [False False False]]

1.2-数组与标量比较

one8 > 2
输出:
array([[False, False, False],
       [ True,  True,  True],
       [ True,  True,  True]])

2-数组位运算

实现数组元素按二进制进行与(&)或(|)非(~)左移(<<)、**右移(>>)**运算

2.1-数组与数组的位运算

one9 = np.arange(9).reshape(3, 3)
print('one9= ', one9)

b10 = np.array([[True, False, True], [True, False, True], [True, False, True]])
print('b10= ', b10)
#在二进制中True的比特位是1,False的比特位是0

#与运算
print('与运算,one9&b10 = ', one9&b10)  #对应元素相等的返回True,不等返回False
#这里仅对one9左边第一列的二进制位与运算过程进行解释
#0的二进制位都是0bit位,所以跟(True)与的结果都为0
#3的二进制位都是0000 0011,所以跟True(0000 0001)与的结果都为1
#6的二进制位都是0000 0110,所以跟True(0000 0001)与的结果都为0

#或运算
print('或运算,one9 | b10 = ', one9 | b10)  
#数组one9的2元素(0000 0010)与True或的结果为3,其二进制位计算过程为:
#0000 0010 | 0000 0001 = 0000 0011,0000 0011转化为十进制即为3

#非运算
print('非运算,~one9  = ', ~one9)  

#左移运算(<<)
b21 = np.full((3,3), 2)
print('b21= ', b21)

print('左移运算,one9<<b21  = ', one9<<b21 )    #one9的所有元素向右位移2位
#例如one9中的元素1(二进制位0000 0001)左移2位后变为4(二进制为0000 0100)
#例如one9中的元素3(二进制位0000 0011)左移2位后变为12(二进制为0000 1100)

#右移运算
print('右移运算,one9>>b21  = ', one9>>b21 )    #one9的所有元素向右位移2位
#例如one9中的元素1(二进制位0000 0001)左移2位后变为4(二进制为0000 0100)
#例如one9中的元素3(二进制位0000 0011)左移2位后变为12(二进制为0000 1100)

#注意:数组one9在连续做位运算后,并没有影响one9数组本身的值,只是在运算后生成了一个临时数组

输出:

one9=  [[0 1 2]
 		[3 4 5]
 		[6 7 8]]
b10=  [[ True False  True]
 	   [ True False  True]
 	   [ True False  True]]
 	   
与运算:
one9&b10 =  [[0 0 0]
 			 [1 0 1]
			 [0 0 0]]
			 
或运算:
one9 | b10 =  [[1 1 3]
			   [3 4 5]
			   [7 7 9]]
			   
非运算:
~one9  =  [[-1 -2 -3]
		   [-4 -5 -6]
 		   [-7 -8 -9]]
 		   
b21=  [[2 2 2]
 	   [2 2 2]
       [2 2 2]]
左移运算:
one9<<b21  =  [[ 0  4  8]
 			   [12 16 20]
               [24 28 32]]
               
右移运算:
one9>>b21  =  [[0 0 0]
 			   [0 1 1]
               [1 1 2]]

2.2-数组与标量的位运算

b11 = np.ones(9).reshape(3,3)
print('数组与标量位运算one9 & 2=',one9 & 2)
数组与标量位运算:
one9 & 2= [[0 0 2]
 		   [2 0 0]
 		   [2 2 0]]
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值