二元运算
In [1]:
- import numpy as np
四则运算
运算 | 函数 |
---|---|
a + b |
add(a,b) |
a - b |
subtract(a,b) |
a * b |
multiply(a,b) |
a / b |
divide(a,b) |
a ** b |
power(a,b) |
a % b |
remainder(a,b) |
以乘法为例,数组与标量相乘,相当于数组的每个元素乘以这个标量:
In [2]:
- a = np.array([1,2])
- a * 3
Out[2]:
- array([3, 6])
数组逐元素相乘:
In [3]:
- a = np.array([1,2])
- b = np.array([3,4])
- a * b
Out[3]:
- array([3, 8])
使用函数:
In [4]:
- np.multiply(a, b)
Out[4]:
- array([3, 8])
事实上,函数还可以接受第三个参数,表示将结果存入第三个参数中:
In [5]:
- np.multiply(a, b, a)
Out[5]:
- array([3, 8])
In [6]:
- a
Out[6]:
- array([3, 8])
比较和逻辑运算
运算 | 函数< |
---|---|
== |
equal |
!= |
not_equal |
> |
greater |
>= |
greater_equal |
< |
less |
<= |
less_equal |
logical_and |
|
logical_or |
|
logical_xor |
|
logical_not |
|
& |
bitwise_and |
bitwise_or |
|
^ |
bitwise_xor |
~ |
invert |
>> |
right_shift |
<< |
left_shift |
等于操作也是逐元素比较的:
In [7]:
- a = np.array([[1,2,3,4],
- [2,3,4,5]])
- b = np.array([[1,2,5,4],
- [1,3,4,5]])
- a == b
Out[7]:
- array([[ True, True, False, True],
- [False, True, True, True]], dtype=bool)
这意味着,如果我们在条件中要判断两个数组是否一样时,不能直接使用
if a == b:
而要使用:
if all(a==b):
对于浮点数,由于存在精度问题,使用函数 allclose
会更好:
if allclose(a,b):
logical_and
也是逐元素的 and
操作:
In [8]:
- a = np.array([0,1,2])
- b = np.array([0,10,0])
- np.logical_and(a, b)
Out[8]:
- array([False, True, False], dtype=bool)
0
被认为是 False
,非零则是 True
。
比特操作:
In [9]:
- a = np.array([1,2,4,8])
- b = np.array([16,32,64,128])
- a | b
Out[9]:
- array([ 17, 34, 68, 136])
取反:
In [10]:
- a = np.array([1,2,3,4], np.uint8)
- ~a
Out[10]:
- array([254, 253, 252, 251], dtype=uint8)
左移:
In [11]:
- a << 3
Out[11]:
- array([ 8, 16, 24, 32], dtype=uint8)
要注意的是 &
的运算优先于比较运算如 >
等,所以必要时候需要加上括号:
In [12]:
- a = np.array([1,2,4,8])
- b = np.array([16,32,64,128])
- (a > 3) & (b < 100)
Out[12]:
- array([False, False, True, False], dtype=bool)