Numpy 第五章 数学函数

张开发
2026/5/22 0:12:59 15 分钟阅读
Numpy 第五章 数学函数
一.向量化和广播向量化用数组操作代替显式循环for/while让底层C语言处理循环代码更简洁高效也更符合Python风格Pythonic。广播当对两个形状不同shape不同的数组进行算术运算时NumPy自动将较小的数组“扩展”成与较大数组兼容的形状再进行运算避免手动复制数据。广播的三大规则广播机制遵循以下规则来判断两个数组是否能进行运算维度对齐如果两个数组的维度数dim不同会在维度较少的数组的左边补1直到维度数相同。维度扩展从后往前比较两个数组的每一维如果某一维的长度相同则继续比较前一位如果某一维的长度为1则将其扩展成与另一个数组对应维度相同的长度相当于复制数据报错条件如果某一维的长度既不相同也不为1则广播失败抛出ValueError。例 二维数组加一维数组兼容import numpy as np x np.arange(4) # shape: (4,) y np.ones((3, 4)) # shape: (3, 4) print((x y).shape) # 输出: (3, 4) print(x y) # [[1. 2. 3. 4.] # [1. 2. 3. 4.] # [1. 2. 3. 4.]]分析x的 shape 是(4,)y的 shape 是(3, 4)。根据规则1x左边补1 →(1, 4)。根据规则2x的第0维长度为1扩展为3y的第1维长度为4保持不变 → 两者都变成(3, 4)匹配成功。结果每一行都是x的值加上y的对应列。例两个数组均需要广播复杂匹配x np.arange(4).reshape(4, 1) # shape: (4, 1) y np.ones(5) # shape: (5,) print((x y).shape) # 输出: (4, 5) print(x y) # [[1. 1. 1. 1. 1.] # [2. 2. 2. 2. 2.] # [3. 3. 3. 3. 3.] # [4. 4. 4. 4. 4.]]分析x的 shape 是(4, 1)y的 shape 是(5,)。规则1y左边补1 →(1, 5)。规则2从右往左比x第1维是1 → 扩展为5y第0维是1 → 扩展为4。最终x变为(4, 5)y变为(4, 5)匹配成功。结果每行都是x的行值1,2,3,4重复5次。例:不匹配报错例子x np.arange(4) # shape: (4,) y np.ones(5) # shape: (5,) print(x y) # ValueError: operands could not be broadcast together with shapes (4,) (5,)分析x和y的 shape 分别是(4,)和(5,)。规则1无需补位都是1维。规则2从右往左比长度分别为4和5既不相等也没有1因此广播失败报错。关键技巧np.newaxisx np.array([0., 10., 20., 30.]) # shape: (4,) y np.array([1., 2., 3.]) # shape: (3,) z x[:, np.newaxis] y # 等价于 x.reshape(4, 1) yx[:, np.newaxis]的作用是在x的第1维列插入一个新轴使x的 shape 从(4,)变为(4, 1)从而可以与(3,)的y进行广播运算得到(4, 3)的结果。二.算数运算1.运算函数介绍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)对数组进行逐元素除法返回不大于商的整数。numpy.power(x1, x2, *args, **kwargs)对数组进行逐元素幂运算。广播规则当数组与标量进行运算时标量会与数组中的每个元素分别进行运算。例如x 1会将1加到数组x的每个元素上。例一维数组import numpy as np x np.array([1, 2, 3, 4, 5, 6, 7, 8])加法y x 1 print(y) # [2 3 4 5 6 7 8 9] print(np.add(x, 1)) # [2 3 4 5 6 7 8 9]解释x 1和np.add(x, 1)都是将数组x中的每个元素加1。减法y x - 1 print(y) # [0 1 2 3 4 5 6 7] print(np.subtract(x, 1)) # [0 1 2 3 4 5 6 7]解释x - 1和np.subtract(x, 1)都是将数组x中的每个元素减1。乘法y x * 2 print(y) # [ 2 4 6 8 10 12 14 16] print(np.multiply(x, 2)) # [ 2 4 6 8 10 12 14 16]解释x * 2和np.multiply(x, 2)都是将数组x中的每个元素乘以2。除法y x / 2 print(y) # [0.5 1. 1.5 2. 2.5 3. 3.5 4. ] print(np.divide(x, 2)) # [0.5 1. 1.5 2. 2.5 3. 3.5 4. ]解释x / 2和np.divide(x, 2)都是将数组x中的每个元素除以2返回浮点数结果。地板除法y x // 2 print(y) # [0 1 2 2 3 3 4 4] print(np.floor_divide(x, 2)) # [0 1 2 2 3 3 4 4]解释x // 2和np.floor_divide(x, 2)都是将数组x中的每个元素除以2然后向下取整。幂运算y x ** 2 print(y) # [ 1 4 9 16 25 36 49 64] print(np.power(x, 2)) # [ 1 4 9 16 25 36 49 64]解释x ** 2和np.power(x, 2)都是将数组x中的每个元素进行平方运算。例二维数组x np.array([[11, 12, 13, 14, 15], ...])二维数组的运算逻辑和一维一致标量会被广播到所有行、所有列的元素上逐元素运算。加法y x 1 # 标量 1 广播到 x 的每个元素逐元素加 1 print(y) # 输出: # [[12 13 14 15 16] # [17 18 19 20 21] # [22 23 24 25 26] # [27 28 29 30 31] # [32 33 34 35 36]] print(np.add(x, 1)) # 等价于 x 1减法y x - 1 # 标量 1 广播到 x 的每个元素逐元素减 1 print(y) # 输出: # [[10 11 12 13 14] # [15 16 17 18 19] # [20 21 22 23 24] # [25 26 27 28 29] # [30 31 32 33 34]] print(np.subtract(x, 1)) # 等价于 x - 1乘法y x * 2 # 标量 2 广播到 x 的每个元素逐元素乘 2 print(y) # 输出: # [[22 24 26 28 30] # [32 34 36 38 40] # [42 44 46 48 50] # [52 54 56 58 60] # [62 64 66 68 70]] print(np.multiply(x, 2)) # 等价于 x * 2除法y x / 2 # 标量 2 广播到 x 的每个元素逐元素做真除法保留小数 print(y) # 输出: # [[ 5.5 6. 6.5 7. 7.5] # [ 8. 8.5 9. 9.5 10. ] # [10.5 11. 11.5 12. 12.5] # [13. 13.5 14. 14.5 15. ] # [15.5 16. 16.5 17. 17.5]] print(np.divide(x, 2)) # 等价于 x / 2地板除法y x // 2 # 标量 2 广播到 x 的每个元素逐元素做地板除取不大于商的整数 print(y) # 输出: # [[ 5 6 6 7 7] # [ 8 8 9 9 10] # [10 11 11 12 12] # [13 13 14 14 15] # [15 16 16 17 17]] print(np.floor_divide(x, 2)) # 等价于 x // 2幂运算y x ** 2 # 标量 2 广播到 x 的每个元素逐元素求平方即 x² print(y) # 输出: # [[ 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]] print(np.power(x, 2)) # 等价于 x ** 2例二维数组与一维数组的运算import numpy as np 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 np.arange(1, 6) # y [1, 2, 3, 4, 5] (形状为 (5,))加减法z x y # 或 np.add(x, y) print(z) # 输出 # [[12 14 16 18 20] # [17 19 21 23 25] # [22 24 26 28 30] # [27 29 31 33 35] # [32 34 36 38 40]] z x - y # 或 np.subtract(x, y) print(z) # 输出 # [[10 10 10 10 10] # [15 15 15 15 15] # ...后续行类似每行减去 y 的对应元素]广播过程y从(5,)扩展为(5,5)每行都是[1,2,3,4,5]。运算逻辑x的每个元素x[i,j]与y[j]相加/相减j为列索引。乘法、除法、整除z x * y # 或 np.multiply(x, y) # 输出[[ 11 24 39 56 75], [ 16 34 54 76 100], ...] z x / y # 或 np.divide(x, y) # 输出[[11. 6. 4.33333333 3.5 3. ], ...] z x // y # 或 np.floor_divide(x, y) # 输出[[11 6 4 3 3], [16 8 6 4 4], ...]乘法x[i,j] * y[j]逐元素相乘。除法x[i,j] / y[j]浮点除法。整除x[i,j] // y[j]向下取整除法。广播机制让y自动扩展为5×5避免手动 reshape。幂运算广播自定义形状z x ** np.full([1, 5], 2) # np.full([1,5],2) 生成 [[2,2,2,2,2]] # 等价于 x ** 2因为 [[2,2,2,2,2]] 广播为 5×5 的全 2 矩阵 print(z) # 输出[[121 144 169 196 225], [256 289 324 361 400], ...] # 或用 np.power(x, np.full([5,5], 2)) 效果相同np.full([1,5], 2)生成形状(1,5)的数组全 2广播为(5,5)后与x逐元素求幂。结果每个元素x[i,j]的平方x[i,j] ** 2。总结当两个数组进行算术运算时若形状不完全相同NumPy 会从最后一个维度开始​ 检查兼容性若维度大小相同如(5,5)和(5,5)直接运算。若一个数组维度大小为 1如(1,5)则自动扩展该维度至与另一个数组匹配如(5,5)。若维度不满足上述条件如(3,5)和(2,5)则报错。2.numpy.sqrt函数和numpy.square函数numpy.sqrt(x)​返回数组x中每个元素的非负平方根逐元素操作element-wise。numpy.square(x)​返回数组x中每个元素的平方值逐元素操作。例import numpy as np x np.arange(1, 5) # 生成数组 [1, 2, 3, 4] print(x) # 输出: [1 2 3 4] # 1. 计算平方根 y np.sqrt(x) print(y) # 输出: [1. 1.41421356 1.73205081 2. ] print(np.power(x, 0.5)) # 等价于 sqrt输出相同 # 2. 计算平方 y np.square(x) print(y) # 输出: [ 1 4 9 16] print(np.power(x, 2)) # 等价于 square输出相同总结np.sqrt(x)与np.power(x, 0.5)功能相同都是开平方。np.square(x)与np.power(x, 2)功能相同都是平方。所有操作均为逐元素element-wise即对数组中每个元素独立计算。输入可以是标量、列表、元组或 NumPy 数组输出为 NumPy 数组。记忆口诀“sqrt 开根square 平方power 灵活0.5 是根2 是方。”3.三角函数1通用函数ufunc的概念NumPy 的通用函数universal function简称 ufunc会对数组中的每个元素逐一操作生成与原数组形状相同的新数组。例如sin()、sqrt()、log()等函数都属于 ufunc。2三角函数与反三角函数列表图片中列出了以下函数均为 element-wise 逐元素操作三角函数numpy.sin、numpy.cos、numpy.tan分别对数组元素计算正弦、余弦、正切值。反三角函数numpy.arcsin、numpy.arccos、numpy.arctan分别对数组元素计算反正弦、反余弦、反正切值输入需在函数定义域内如arcsin/arccos的输入范围是 [-1, 1]。例生成等间距数组xx np.linspace(start0, stopnp.pi / 2, num10) print(x) # 输出0 到 π/2 之间的 10 个等间距数例如 # [0. 0.17453293 0.34906585 0.52359878 0.6981317 0.87266463 # 1.04719755 1.22173048 1.3962634 1.57079633]np.linspace用于生成指定区间内的等间距数值这里生成了从0到π/2约 1.5708的 10 个点。例计算正弦函数y np.sin(x)y np.sin(x) print(y) # 输出x 中每个元素的正弦值例如 # [0. 0.17364818 0.34202014 0.5 0.64278761 0.76604444 # 0.8660254 0.93969262 0.98480775 1. ]np.sin对每个x[i]计算sin(x[i])结果为新数组y。例:反正弦函数z np.arcsin(y)z np.arcsin(y) print(z) # 输出y 中每个元素的反正弦值因 y 是 sin(x) 的结果理论上应还原为 x # [0. 0.17453293 0.34906585 0.52359878 0.6981317 0.87266463 # 1.04719755 1.22173048 1.3962634 1.57079633]np.arcsin是sin的反函数若y sin(x)则arcsin(y) ≈ x需注意浮点精度。例 余弦函数y np.cos(x)y np.cos(x) print(y) # 输出x 中每个元素的余弦值例如 # [1.00000000e00 9.84807753e-01 9.39692621e-01 8.66025404e-01 # 7.66044443e-01 6.42787610e-01 5.00000000e-01 3.42020143e-01 # 1.73648178e-01 6.12323400e-17] # 最后一个数接近 0因 cos(π/2)0np.cos对每个x[i]计算cos(x[i])。例: 反余弦函数z np.arccos(y)z np.arccos(y) print(z) # 输出y 中每个元素的反余弦值因 y 是 cos(x) 的结果理论上应还原为 x # [0. 0.17453293 0.34906585 0.52359878 0.6981317 0.87266463 # 1.04719755 1.22173048 1.3962634 1.57079633]np.arccos是cos的反函数若y cos(x)则arccos(y) ≈ x需注意浮点精度。例正切函数y np.tan(x)y np.tan(x) print(y) # 输出x 中每个元素的正切值例如 # [0.00000000e00 1.76326981e-01 3.63970234e-01 5.77350269e-01 # 8.39099631e-01 1.19175359e00 1.73205081e00 2.74747742e00 # 5.67128182e00 1.63312394e16] # 最后一个数极大因 tan(π/2) 趋近于无穷大np.tan对每个x[i]计算tan(x[i])当x接近π/2时正切值会急剧增大浮点精度限制下可能溢出。例: 反正切函数z np.arctan(y)z np.arctan(y) print(z) # 输出y 中每个元素的反正切值因 y 是 tan(x) 的结果理论上应还原为 x # [0. 0.17453293 0.34906585 0.52359878 0.6981317 0.87266463 # 1.04719755 1.22173048 1.3962634 1.57079633]np.arctan是tan的反函数若y tan(x)则arctan(y) ≈ x需注意浮点精度。总结逐元素操作所有三角函数/反三角函数都是 ufunc对输入数组的每个元素独立计算输出数组形状与输入一致。反函数还原性若y f(x)f是三角/反三角函数则f⁻¹(y) ≈ x忽略浮点精度误差。定义域注意反三角函数如arcsin/arccos的输入必须在合法范围内如arcsin要求输入 ∈ [-1, 1]否则会报错或得到非预期结果。4.指数和对数函数名功能描述numpy.exp计算输入数组中所有元素的自然指数即 ex其中 e是自然常数numpy.log计算输入数组中所有元素的自然对数以 e为底即 ln(x)numpy.exp2计算输入数组中所有元素的以 2 为底的指数即 2xnumpy.log2计算输入数组中所有元素的以 2 为底的对数即 log2​(x)numpy.log10计算输入数组中所有元素的以 10 为底的对数即 log10​(x)例numpy.exp和numpy.log的互逆关系import numpy as np x np.arange(1, 5) # 生成数组 [1, 2, 3, 4] print(x) # 输出: [1 2 3 4] y np.exp(x) # 计算每个元素的自然指数e^1, e^2, e^3, e^4 print(y) # 输出: [ 2.71828183 7.3890561 20.08553692 54.59815003] z np.log(y) # 计算自然对数的逆运算ln(e^1), ln(e^2), ln(e^3), ln(e^4) print(z) # 输出: [1. 2. 3. 4.]原理自然指数函数exp和自然对数函数log是互逆运算即 ln(ex)x。示例中也验证了这一点z的输出与原始数组x完全一致。特点逐元素操作这些函数对所有数组元素独立计算返回与原数组形状相同的数组。定义域限制对数函数如log、log2、log10的输入必须大于 0反三角函数如arcsin、arccos的输入需在 [-1, 1] 范围内。数学意义指数和对数函数在科学计算、信号处理、统计分析等领域广泛应用如归一化、衰减模型、对数坐标绘图等。5.加法函数1聚合函数numpy.sum功能对数组元素求和可通过axis参数指定求和的维度。参数a输入数组。axis求和的维度默认None对所有元素求和axis0沿纵轴行求和axis1沿横轴列求和。dtype输出数据类型可选。out输出数组可选。import numpy as np 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]]) # 1. 对所有元素求和axisNone y np.sum(x) print(y) # 输出: 575所有元素总和1112...35 575 # 2. 沿纵轴axis0求和每列的和 y np.sum(x, axis0) print(y) # 输出: [105 110 115 120 125]每列元素相加1116212631105依此类推 # 3. 沿横轴axis1求和每行的和 y np.sum(x, axis1) print(y) # 输出: [65 90 115 140 165]每行元素相加111213141565依此类推2累加函数numpy.cumsum功能返回数组元素沿指定轴的累加和即第 i 个元素是前 i 个元素的累加。参数a输入数组。axis累加的维度默认None对所有元素累加axis0沿纵轴累加axis1沿横轴累加。dtype输出数据类型可选。out输出数组可选。import numpy as np 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]]) # 1. 对所有元素累加axisNone y np.cumsum(x) print(y) # 输出: [ 11 23 36 50 65 81 98 116 135 155 176 198 221 245 270 296 323 351 380 410 441 473 506 540 575] # 解释先加第一行[11,23,36,50,65]再加第二行[81(6516),98(8117),...], 依此类推 # 2. 沿纵轴axis0累加每列的累加和 y np.cumsum(x, axis0) print(y) # 输出: # [[ 11 12 13 14 15] # [ 27 29 31 33 35] 第一行第二行111627, 121729, ... # [ 48 51 54 57 60] 前两行第三行272148, 292251, ... # [ 74 78 82 86 90] 前三行第四行482674, 512778, ... # [105 110 115 120 125]]前四行第五行7431105, 7832110, ... # 3. 沿横轴axis1累加每行的累加和 y np.cumsum(x, axis1) print(y) # 输出: # [[ 11 23 36 50 65] 第一行11, 111223, 231336, ... # [ 16 33 51 70 90] 第二行16, 161733, 331851, ... # [ 21 43 66 90 115] 第三行21, 212243, 432366, ... # [ 26 53 81 110 140] 第四行26, 262753, 532881, ... # [ 31 63 96 130 165]]第五行31, 313263, 633396, ...6.乘法函数1numpy.prod—— 计算数组元素的乘积功能返回数组元素在指定轴上的乘积。函数numpy.prod(a[, axisNone, dtypeNone, outNone, ...])参数说明a: 输入数组。axis: 指定计算的轴。None表示对所有元素求乘积axis0按列求积axis1按行求积。dtype: 输出数据类型。out: 可选输出数组。import numpy as np 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 np.prod(x) print(y) # 788529152 所有元素的乘积 y np.prod(x, axis0) print(y) # [2978976 3877632 4972968 6294624 7875000] 每列元素的乘积 y np.prod(x, axis1) print(y) # 每行元素的乘积图中未显示完整但逻辑如此2numpy.cumprod—— 计算数组元素的累乘功能返回沿指定轴的累积乘积。函数numpy.cumprod(a, axisNone, dtypeNone, outNone)参数说明a: 输入数组。axis: 指定计算的轴。None表示展平后计算axis0按列累乘axis1按行累乘。import numpy as np 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 np.cumprod(x) print(y) # 展平后逐元素累乘的结果图中显示了部分值 y np.cumprod(x, axis0) print(y) # 按列累乘每列的当前元素乘以前面所有元素的乘积 y np.cumprod(x, axis1) print(y) # 按行累乘每行的当前元素乘以前面所有元素的乘积3numpy.diff—— 计算数组的差值功能计算沿指定轴的离散差值即相邻元素的差。函数numpy.diff(a, n1, axis-1, prependnp._NoValue, appendnp._NoValue)参数说明a: 输入数组。n: 差值的阶数默认是1一阶差分。axis: 计算差值的轴默认是最后一个轴axis-1。prepend/append: 可选用于在数组开头或结尾添加值后再计算差值。一阶差分公式out[i] a[i1] - a[i]import numpy as np 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] 第一行3-2, 4-3, 5-4 # [2 0 1] 第二行8-6, 8-8, 9-8 # [1 1 1]] 第三行11-10, 12-11, 13-12 print(np.diff(A, axis0)) # [[4 5 4 4]] 第一列6-2, 10-6第二列8-3, 11-8...7.四舍五入1numpy.around—— 四舍五入按小数位数舍入功能将数组元素四舍五入到指定的小数位数。函数numpy.around(a, decimals0, outNone)a输入数组。decimals可选保留的小数位数默认0即整数。import numpy as np # 生成 3×3 随机数组范围 0~10并乘以 10 x np.random.rand(3, 3) * 10 print(x) # 输出示例 # [[6.59144457 3.78566113 8.15321227] # [1.68241475 3.78753332 7.68886328] # [2.84255822 9.58106727 7.86678037]] # 1. 默认 decimals0四舍五入到整数 y np.around(x) print(y) # 输出 # [[7. 4. 8.] # [2. 4. 8.] # [3. 10. 8.]] # 2. 保留 2 位小数decimals2 y np.around(x, decimals2) print(y) # 输出 # [[6.59 3.79 8.15] # [1.68 3.79 7.69] # [2.84 9.58 7.87]]2numpy.ceil—— 向上取整返回不小于输入的最小整数功能对数组元素逐元素向上取整即取比元素大的最小整数。函数numpy.ceil(x, *args, **kwargs)x输入数组可以是数值或数组。import numpy as np # 生成 3×3 随机数组范围 0~10并乘以 10 x np.random.rand(3, 3) * 10 print(x) # 输出示例 # [[0.67847795 1.33073923 4.53920122] # [7.55724676 5.88854047 2.65502046] # [8.67640444 8.80110812 5.97528726]] # 向上取整每个元素取不小于它的最小整数 y np.ceil(x) print(y) # 输出 # [[1. 2. 5.] # [8. 6. 3.] # [9. 9. 6.]]3numpy.floor—— 向下取整返回不大于输入的最大整数功能对数组元素逐元素向下取整即取比元素小的最大整数。函数numpy.floor(x, *args, **kwargs)x输入数组可以是数值或数组。import numpy as np # 复用上面的随机数组 x x np.random.rand(3, 3) * 10 print(x) # 输出示例 # [[0.67847795 1.33073923 4.53920122] # [7.55724676 5.88854047 2.65502046] # [8.67640444 8.80110812 5.97528726]] # 向下取整每个元素取不大于它的最大整数 y np.floor(x) print(y) # 输出 # [[0. 1. 4.] # [7. 5. 2.] # [8. 8. 5.]]8.杂项1numpy.clip裁剪数组值到指定区间功能将数组中的值限制在指定的区间[a_min, a_max]内小于a_min的值会被替换为a_min大于a_max的值会被替换为a_max在区间内的 values 保持不变。语法numpy.clip(a, a_min, a_max, outNone, **kwargs)a输入数组a_min最小值区间下界a_max最大值区间上界out可选输出数组用于存储结果。import numpy as np # 创建一个二维数组 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]]) # 将数组值裁剪到 [20, 30] 区间 y np.clip(x, a_min20, a_max30) print(y) # [[20 20 20 20 20] [20 20 20 20 20] [21 22 23 24 25] [26 27 28 29 30] [30 30 30 30 30]]第一行原数组值均20因此被替换为20第五行原数组值均30因此被替换为30中间行第三、四行的部分值在[20, 30]区间内保持原值。2numpy.absolute/numpy.abs逐元素计算绝对值功能对数组中的每个元素计算绝对值正数保持不变负数变为其相反数0 保持 0。语法numpy.absolute(x, *args, **kwargs)完整函数名numpy.abs(x, *args, **kwargs)简写形式功能与absolute完全一致。import numpy as np # 创建一个从 -5 到 4 的一维数组 x np.arange(-5, 5) print(原数组 x:, x) # 输出: [-5 -4 -3 -2 -1 0 1 2 3 4] # 使用 np.abs 计算绝对值 y_abs np.abs(x) print(np.abs(x):, y_abs) # 输出: [5 4 3 2 1 0 1 2 3 4] # 使用 np.absolute 计算绝对值结果相同 y_absolute np.absolute(x) print(np.absolute(x):, y_absolute) # 输出: [5 4 3 2 1 0 1 2 3 4]3numpy.sign逐元素返回数字的符号功能对数组中的每个元素返回其符号正数返回1负数返回-10 返回0。语法numpy.sign(x, *args, **kwargs)x输入数组。import numpy as np # 创建一个从 -5 到 4 的一维数组 x np.arange(-5, 5) print(原数组 x:, x) # 输出: [-5 -4 -3 -2 -1 0 1 2 3 4] # 计算符号 sign_result np.sign(x) print(np.sign(x):, sign_result) # 输出: [-1 -1 -1 -1 -1 0 1 1 1 1]前 5 个元素-5 ~ -1为负数返回-1第 6 个元素0返回0后 4 个元素1 ~ 4为正数返回1。

更多文章