数学函数与逻辑函数
1.数学函数
广播
对于不同形状的数组进行运算时,让较小的数组在较大的数组上进行“广播”,使得它们的形状兼容。
广播的规则:
- 如果两个数组的维度数dim不相同,那么小维度数组的形状将会在左边补1;
- 如果shape维度不匹配,但是有维度是1,那么可以扩展维度是1的维度匹配另一个数组;
- 如果shape维度不匹配,但是没有任何一个维度是1,则匹配引发错误;
通用函数与聚合函数
通用函数(universal function)通常叫作ufunc,它对数组中的各个元素逐一进行操作。这表明,通用函数分别处理输入数组的每个元素,生成的结果组成一个新的输出数组。输出数组的大小跟输入数组相同。算术运算和三角函数都是通用函数。
聚合函数 是指对一组值(比如一个数组)进行操作,返回一个单一值作为结果的函数。因而,求数组所有元素之和的函数就是聚合函数。ndarray类实现了多个这样的函数。
算术运算
- numpy.add(x1, x2, *args, **kwargs)
- numpy.subtract(x1, x2, *args, **kwargs)
- numpy.multiply(x1, x2, *args, **kwargs)
- numpy.divide(x1, x2, *args, **kwargs)
- numpy.floor_divide(x1, x2, *args, **kwargs) 对x1/x2向下取整
- numpy.power(x1, x2, *args, **kwargs) x1的x2次方
注意乘方的运算规则
#一维
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = x ** 2
print(y)
print(np.power(x, 2))
# [ 1 4 9 16 25 36 49 64]
#二维
x = np.array([[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]])
y = x ** 2
print(y)
print(np.power(x, 2))
# [[ 121 144 169 196 225]
# [ 256 289 324 361 400]
# [ 441 484 529 576 625]
# [ 676 729 784 841 900]
# [ 961 1024 1089 1156 1225]]
- numpy.sqrt(x, *args, **kwargs) 开根号
- numpy.square(x, *args, **kwargs) 平方
三角函数
- numpy.sin(x, *args, **kwargs)
- numpy.cos(x, *args, **kwargs)
- numpy.tan(x, *args, **kwargs)
- numpy.arcsin(x, *args, **kwargs)
- numpy.arccos(x, *args, **kwargs)
- numpy.arctan(x, *args, **kwargs)
指数和对数
- numpy.exp(x, *args, **kwargs)
- Calculate the exponential of all elements in the input array.
- numpy.log(x, *args, **kwargs)
- numpy.exp2(x, *args, **kwargs) 2的x次方
- numpy.log2(x, *args, **kwargs)
- numpy.log10(x, *args, **kwargs)
加法、乘法函数
- numpy.sum(a[, axis=None, dtype=None, out=None, …])其中axis=i时,表示numpy沿着第i个下标变化的方向进行操作。二维中,i=0,第0个下标的变化方向是向下,则沿着纵轴相加;i=1,第1个下表的变化方向是向右,则沿着横轴相加。
- numpy.cumsum(a, axis=None, dtype=None, out=None)返回的是累加和;axis同上解释。
- numpy.prod(a[, axis=None, dtype=None, out=None, …])乘积
- numpy.cumprod(a, axis=None, dtype=None, out=None)累乘
- numpy.diff(a, n=1, axis=-1, prepend=np._NoValue, append=np._NoValue)差值(沿着指定轴计算第N维的离散差值), 即newa[i] = a[i+1] - a[i];n表示要执行几次差值;axis默认是-1,在二维数组中,axis=-1与axis=1是相同的,解释同上;
A = np.arange(2, 14).reshape((3, 4))
A[1, 1] = 8
print(A)
# [[ 2 3 4 5]
# [ 6 8 8 9]
# [10 11 12 13]]
print(np.diff(A)) #从右向左减
# [[1 1 1]
# [2 0 1]
# [1 1 1]]
print(np.diff(A,axis=1))
# [[1 1 1]
# [2 0 1]
# [1 1 1]]
print(np.diff(A, axis=0)) # 从下向上减
# [[4 5 4 4]
# [4 3 4 4]]
四舍五入
- numpy.around(a, decimals=0, out=None) 将a保留decimals位小数
- numpy.ceil(x, *args, **kwargs) 向上取整
- numpy.floor(x, *args, **kwargs) 向下取整
杂项
- numpy.clip(a, a_min, a_max, out=None, **kwargs) 裁剪(限制)数组a中的值;限制a中元素最大值和最小值,若元素值小于最小值,则取最小值作为该元素值,若元素值大于最大值,则取最大值作为该元素值。
- numpy.absolute(x, *args, **kwargs)=numpy.abs(x, *args, **kwargs) 取x的绝对值
- numpy.sign(x, *args, **kwargs) 符号函数;即x<0,返回-1;x=0,返回0;x>0,返回1。
2.逻辑函数
真值测试
- numpy.all(a, axis=None, out=None, keepdims=np._NoValue) 在给定轴上测试所有a元素是否为真(用于判断整个数组中的元素的值是否全部满足条件,如果满足条件返回True,否则返回False)
- numpy.any(a, axis=None, out=None, keepdims=np._NoValue) 在给定轴上测试a是否含有元素为真(用于判断整个数组中的元素至少有一个满足条件就返回True,否则返回False)
逻辑运算
- numpy.logical_not(x, *args, **kwargs) 非
- numpy.logical_and(x1, x2, *args, **kwargs) 与
- numpy.logical_or(x1, x2, *args, **kwargs) 或
- numpy.logical_xor(x1, x2, *args, **kwargs) 异或
对照
- numpy.greater(x1, x2, *args, **kwargs)
- numpy.greater_equal(x1, x2, *args, **kwargs)
- numpy.equal(x1, x2, *args, **kwargs)
- numpy.not_equal(x1, x2, *args, **kwargs)
- numpy.less(x1, x2, *args, **kwargs)
- numpy.less_equal(x1, x2, *args, **kwargs)
- numpy.isclose(a, b, rtol=1.e-5, atol=1.e-8, equal_nan=False)
- numpy.allclose(a, b, rtol=1.e-5, atol=1.e-8, equal_nan=False)