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