Numpy基础(三):数组操作


注:不同尺寸的数组之间的操作会使用到广播特性,在日常使用中很重要,但是并不会在本章中提到,后续会在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 + x2x1, x2: 输入数组;out(可选): 输出数组
np.subtract(x1, x2)逐元素相减(等价于 x1 - x2同上
np.multiply(x1, x2)逐元素相乘(等价于 x1 * x2同上
np.divide(x1, x2)逐元素除法(等价于 x1 / x2同上
np.true_dividenp.divide 相同,返回浮点结果同上
np.floor_divide逐元素向下取整除法(等价于 //同上
np.power(x1, x2)逐元素计算 x1x2 次幂(等价于 x1 ** x2x1: 基数;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)逐元素判断是否为NaNx: 输入数组
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 > x2x1, 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 = ba: 系数矩阵;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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值