注:不同尺寸的数组之间的操作会使用到广播特性,在日常使用中很重要,但是并不会在本章中提到,后续会在Numpy高阶使用中介绍。
1.Numpy数组算术
在numpy中,其操作都是批量操作而非显式的利用多重for循环,这一特性称为向量化。对于单个数组,以及多个数组都是逐元素操作:
arr = np.array([[1., 2., 3.], [4., 5., 6.]])
arr
arr * arr
arr - arr
'''
array([[1., 2., 3.],
[4., 5., 6.]])
array([[ 1., 4., 9.],
[16., 25., 36.]])
array([[0., 0., 0.],
[0., 0., 0.]])
'''
1 / arr
arr ** 0.5
'''
array([[1. , 0.5 , 0.3333],
[0.25 , 0.2 , 0.1667]])
array([[1. , 1.4142, 1.7321],
[2. , 2.2361, 2.4495]])
'''
arr2 = np.array([[0., 4., 1.], [7., 2., 12.]])
arr2
arr2 > arr
'''
array([[ 0., 4., 1.],
[ 7., 2., 12.]])
array([[False, True, False],
[ True, False, True]])
'''
2.数组的转置和换轴
转置是一个线性代数的概念,即行上元素变为对应列上的元素,可以使用transpose方法或者直接调用.t属性:
arr = np.arange(15).reshape((3, 5))
arr
arr.T
'''
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]])
'''
对于更高维度的数据,换轴的概念就较为抽象,实际上就是对数组元素的堆叠方向进行了更改,假设原三维数组模拟的是一张图片,即行列通道,那么将axis=0和axis=1进行互换,就是列行通道。可以使用transpose或者swapaxes进行操作:
arr = np.arange(16).reshape((2, 2, 4))
arr
arr.transpose((1, 0, 2))
'''
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
array([[[ 0, 1, 2, 3],
[ 8, 9, 10, 11]],
[[ 4, 5, 6, 7],
[12, 13, 14, 15]]])
'''
arr
arr.swapaxes(1, 2)
'''
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
array([[[ 0, 4],
[ 1, 5],
[ 2, 6],
[ 3, 7]],
[[ 8, 12],
[ 9, 13],
[10, 14],
[11, 15]]])
'''
3.通用函数
| 函数名称 | 描述 | 主要参数 |
|---|---|---|
np.add(x1, x2) | 逐元素相加(等价于 x1 + x2) | x1, x2: 输入数组;out(可选): 输出数组 |
np.subtract(x1, x2) | 逐元素相减(等价于 x1 - x2) | 同上 |
np.multiply(x1, x2) | 逐元素相乘(等价于 x1 * x2) | 同上 |
np.divide(x1, x2) | 逐元素除法(等价于 x1 / x2) | 同上 |
np.true_divide | 与 np.divide 相同,返回浮点结果 | 同上 |
np.floor_divide | 逐元素向下取整除法(等价于 //) | 同上 |
np.power(x1, x2) | 逐元素计算 x1 的 x2 次幂(等价于 x1 ** x2) | x1: 基数;x2: 指数 |
np.sqrt(x) | 逐元素计算平方根 | x: 输入数组 |
np.square(x) | 逐元素计算平方(等价于 x ** 2) | 同上 |
np.exp(x) | 逐元素计算自然指数(e^x) | 同上 |
np.log(x) | 逐元素计算自然对数(ln(x)) | 同上 |
np.log10(x) | 逐元素计算以10为底的对数 | 同上 |
np.log2(x) | 逐元素计算以2为底的对数 | 同上 |
np.sin(x) | 逐元素计算正弦值 | 同上 |
np.cos(x) | 逐元素计算余弦值 | 同上 |
np.tan(x) | 逐元素计算正切值 | 同上 |
np.arcsin(x) | 逐元素计算反正弦值 | 同上 |
np.arccos(x) | 逐元素计算反余弦值 | 同上 |
np.arctan(x) | 逐元素计算反正切值 | 同上 |
np.sinh(x) | 逐元素计算双曲正弦值 | 同上 |
np.cosh(x) | 逐元素计算双曲余弦值 | 同上 |
np.tanh(x) | 逐元素计算双曲正切值 | 同上 |
np.absolute(x) | 逐元素计算绝对值(等价于 abs(x)) | 同上 |
np.sign(x) | 逐元素返回符号(-1, 0, 1) | 同上 |
np.ceil(x) | 逐元素向上取整 | 同上 |
np.floor(x) | 逐元素向下取整 | 同上 |
np.rint(x) | 逐元素四舍五入到最近整数 | 同上 |
np.mod(x1, x2) | 逐元素取模(余数) | x1: 被除数;x2: 除数 |
np.maximum(x1, x2) | 逐元素比较两个数组,返回较大值 | x1, x2: 输入数组 |
np.minimum(x1, x2) | 逐元素比较两个数组,返回较小值 | 同上 |
np.clip(x, a_min, a_max) | 将数组元素限制在 [a_min, a_max] 范围内 | x: 输入数组;a_min, a_max: 限制范围 |
np.isnan(x) | 逐元素判断是否为NaN | x: 输入数组 |
np.isinf(x) | 逐元素判断是否为无穷大 | 同上 |
np.isfinite(x) | 逐元素判断是否为有限值 | 同上 |
np.logical_and(x1, x2) | 逐元素逻辑与操作 | x1, x2: 布尔数组 |
np.logical_or(x1, x2) | 逐元素逻辑或操作 | 同上 |
np.logical_not(x) | 逐元素逻辑非操作 | x: 布尔数组 |
np.greater(x1, x2) | 逐元素判断 x1 > x2 | x1, x2: 输入数组 |
np.less(x1, x2) | 逐元素判断 x1 < x2 | 同上 |
np.equal(x1, x2) | 逐元素判断 x1 == x2 | 同上 |
4. 线性代数
| 函数名 | 描述 | 参数 |
|---|---|---|
numpy.dot(a, b) | 计算两个数组的点积(内积)。 | a: 第一个数组;b: 第二个数组。 |
numpy.vdot(a, b) | 计算两个向量的点积(支持复数)。 | a: 第一个向量;b: 第二个向量。 |
numpy.inner(a, b) | 计算两个数组的内积。 | a: 第一个数组;b: 第二个数组。 |
numpy.outer(a, b) | 计算两个向量的外积。 | a: 第一个向量;b: 第二个向量。 |
numpy.matmul(a, b) | 计算两个数组的矩阵乘积。 | a: 第一个数组;b: 第二个数组。 |
numpy.linalg.det(a) | 计算矩阵的行列式。 | a: 输入矩阵。 |
numpy.linalg.inv(a) | 计算矩阵的逆矩阵。 | a: 输入矩阵。 |
numpy.linalg.pinv(a) | 计算矩阵的伪逆矩阵。 | a: 输入矩阵。 |
numpy.linalg.eig(a) | 计算方阵的特征值和特征向量。 | a: 输入方阵。 |
numpy.linalg.eigh(a) | 计算对称或厄米特矩阵的特征值和特征向量。 | a: 输入对称或厄米特矩阵。 |
numpy.linalg.svd(a) | 计算矩阵的奇异值分解。 | a: 输入矩阵。 |
numpy.linalg.qr(a) | 计算矩阵的QR分解。 | a: 输入矩阵。 |
numpy.linalg.cholesky(a) | 计算矩阵的Cholesky分解。 | a: 输入正定矩阵。 |
numpy.linalg.norm(x) | 计算向量或矩阵的范数。 | x: 输入向量或矩阵;ord: 范数类型(默认为2范数)。 |
numpy.linalg.cond(x) | 计算矩阵的条件数。 | x: 输入矩阵;p: 范数类型(默认为2范数)。 |
numpy.linalg.solve(a, b) | 求解线性方程组 ax = b。 | a: 系数矩阵;b: 常数向量或矩阵。 |
numpy.linalg.lstsq(a, b) | 求解线性最小二乘问题。 | a: 系数矩阵;b: 常数向量或矩阵;rcond: 奇异值截断阈值。 |
numpy.linalg.matrix_rank(a) | 计算矩阵的秩。 | a: 输入矩阵;tol: 奇异值截断阈值。 |
numpy.linalg.trace(a) | 计算矩阵的迹(对角线元素之和)。 | a: 输入矩阵。 |
numpy.linalg.matrix_power(a, n) | 计算矩阵的幂次。 | a: 输入矩阵;n: 幂次。 |
5.统计学方法
| 方法 | 描述 | 示例 |
|---|---|---|
| np.sum() | 计算数组元素的和 | np.sum(arr) |
| np.mean() | 计算数组元素的平均值 | np.mean(arr) |
| np.average() | 计算数组元素的加权平均值 | np.average(arr, weights=weights) |
| np.median() | 计算数组元素的中位数 | np.median(arr) |
| np.std() | 计算数组元素的标准差 | np.std(arr) |
| np.var() | 计算数组元素的方差 | np.var(arr) |
| np.min() | 找出数组中的最小值 | np.min(arr) |
| np.max() | 找出数组中的最大值 | np.max(arr) |
| np.argmin() | 找出数组中最小值的索引 | np.argmin(arr) |
| np.argmax() | 找出数组中最大值的索引 | np.argmax(arr) |
| np.percentile() | 计算数组元素的百分位数 | np.percentile(arr, 50) |
| np.quantile() | 计算数组元素的分位数 | np.quantile(arr, 0.5) |
| np.cumsum() | 计算数组元素的累积和 | np.cumsum(arr) |
| np.cumprod() | 计算数组元素的累积积 | np.cumprod(arr) |
| np.prod() | 计算数组元素的乘积 | np.prod(arr) |
| np.corrcoef() | 计算数组的相关系数矩阵 | np.corrcoef(arr1, arr2) |
| np.cov() | 计算数组的协方差矩阵 | np.cov(arr1, arr2) |
| np.histogram() | 计算数组的直方图 | np.histogram(arr, bins=10) |
:数组操作&spm=1001.2101.3001.5002&articleId=145595935&d=1&t=3&u=94422272f6704a878ea6b18a5db1ca54)
928

被折叠的 条评论
为什么被折叠?



