Apache MXNet mxnet.np 数学函数全解析:三角、双曲、取整、求和、指数对数与算术运算 API 指南

发布时间:2026/9/20 21:09:04
Apache MXNet mxnet.np 数学函数全解析:三角、双曲、取整、求和、指数对数与算术运算 API 指南 人工智能深度学习机器学习【免费下载链接】mxnetLightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more项目地址https://gitcode.com/gh_mirrors/mxne/mxnet点击查看免费下载导读mxnet.np是 Apache MXNet 提供的 NumPy 兼容接口其中的数学函数routines.math覆盖三角函数、双曲函数、取整、求和与差分、指数与对数、算术运算等数十个常用算子让开发者可以在 MXNet 的符号式与命令式编程模型中直接沿用 NumPy 的编程习惯。本文以 routines.math.rst 为骨架逐一解析每一类数学函数的语义、参数与使用注意点并结合 multiarray.py、fallback.py 与底层 C 算子注册代码讲清这些函数从 Python 包装到算子上屏的实现链路。读完本文你将能熟练地在 MXNet 中完成数值计算、数据预处理与张量运算并清楚哪些函数由原生算子加速、哪些函数回退到 NumPy 实现。一、mxnet.np数学函数总览mxnet.np的数学函数 API 参考收录在 routines.math.rst共分为 10 大类分类包含函数三角函数sincostanarcsinarccosarctandegreesradianshypotarctan2deg2radrad2degunwrap双曲函数sinhcoshtanharcsinharccosharctanh取整rintfixfloorceiltruncaroundround_求和、乘积、差分sumprodcumsumnanprodnansumcumprodnancumprodnancumsumdiffediff1dcrosstrapz指数与对数expexpm1loglog10log2log1plogaddexp特殊函数i0浮点例程ldexpsignbitcopysignfrexpspacing有理数例程lcmgcd算术运算addreciprocalnegativedividepowersubtractmodmultiplytrue_divideremainderpositivefloat_powerfmodmodfdivmodfloor_divide杂项clipsqrtcbrtsquareabsolutesignmaximumminimumfabsheavisidefmaxfminnan_to_numinterp这些函数以mxnet.np为命名空间暴露给用户同时也在mxnet.numpy中通过set_module(mxnet.numpy)装饰器见 multiarray.py对外可见。1.1 需要特别留意的 dtype 限制原文档开篇的 note 给出了一个重要提醒目前大多数数学函数只支持输入与输出为相同 dtype。这意味着当输入是整数 dtype如int32/int64的 ndarray而期望输出浮点结果时往往得不到精确结果——整数 dtype 的妥善处理仍在积极开发中。实际使用中建议涉及除法、开方、三角函数、指数对数等非整数运算时先通过astype(float32)或直接传入浮点标量对于sum、prod等归约运算可通过dtype参数显式指定累加与输出类型见下文 5.1 节。二、三角函数从弧度/角度换算到象限感知的反正切2.1 基本三角函数sin、cos、tan逐元素计算输入数组的三角正弦、余弦、正切输入以弧度为单位2π弧度等于 360 度。以 multiarray.py 中sin的实现为例def sin(x, outNone, **kwargs): rTrigonometric sine, element-wise. Parameters ---------- x : ndarray or scalar Angle, in radians (:math:2 \pi rad equals 360 degrees). out : ndarray or None A location into which the result is stored. If provided, it must have a shape that the inputs broadcast to. If not provided or None, a freshly-allocated array is returned. ... This function only supports input type of float. return _mx_nd_np.sin(x, outout, **kwargs)从 docstring 可以看到两个关键约束仅支持浮点类型输入This function only supports input type of float可通过out参数指定输出位置但要求其形状与广播结果一致、dtype 与预期输出相同无法自动做类型转换。使用示例import mxnet.numpy as np np.sin(np.pi / 2.) # 1.0 np.sin(np.array((0., 30., 45., 60., 90.)) * np.pi / 180.) # array([0. , 0.5 , 0.70710677, 0.86602545, 1. ]) np.cos(np.array([0, np.pi/2, np.pi])) # array([ 1.000000e00, -4.371139e-08, -1.000000e00])cos还演示了out参数的用法——传入预分配数组后函数会原地写入并返回该数组的引用out1 np.array([0], dtypef) out2 np.cos(np.array([0.1]), out1) out2 is out1 # True2.2 反三角函数arcsin、arccos、arctan分别计算反正弦、反余弦、反正切。从底层算子描述看np_elemwise_unary_op_basic.ccarcsin的定义域为[-1, 1]输出落在[-π/2, π/2]arccos输入应在[-1, 1]内输出落在闭区间[0, π]且输出存储类型始终为 densearctan输出落在[-π/4, π/4]量级区间对应arctan([-1, 0, 1]) [-π/4, 0, π/4]。2.3 弧度与角度互转degrees/rad2deg将元素从弧度转换为角度例如degrees([0, π/2, π, 3π/2, 2π]) [0, 90, 180, 270, 360]radians/deg2rad将元素从角度转换为弧度是上述函数的逆运算。这两组互为别名的函数同时提供deg2rad与radians、rad2deg与degrees语义一致便于与 NumPy 习惯对齐。2.4 极坐标与相位计算hypot与arctan2hypot(x1, x2)计算sqrt(x1² x2²)即直角坐标到极坐标半径且对中间溢出更稳健arctan2(x1, x2)逐元素计算x1/x2的反正切并根据象限正确选择分支返回弧度制有符号角度值域[-π, π]。注意参数顺序第一个参数是 y 坐标第二个是 x 坐标角色互换。multiarray.py 中arctan2的实现沿用了 IEEE 754 / C 标准atan2的特殊值约定x1yx2xarctan2(x1, x2)±00±0±0−0±π0±inf0 / π0±inf−0 / −π±infinf±(π/4)±inf−inf±(3π/4)注意0与−0、inf与−inf在浮点表示中是不同的数。arctan2仅支持float16、float32、float64并提供了别名atan2np.atan2 is np.arctan2为True。四个不同象限点的典型例子x np.array([-1, 1, 1, -1]) y np.array([-1, -1, 1, 1]) np.arctan2(y, x) * 180 / np.pi # array([-135., -45., 45., 135.])2.5 相位解包裹unwrapunwrap用于将相邻元素间超过 π 的跳变修正为 2π 的整数倍常用于信号处理与相位分析。注意在 fallback.py 的fallbacks列表中unwrap与trapz、nanprod、nansum、cumprod、nancumprod、nancumsum、i0、signbit、frexp、spacing、modf、divmod、heaviside、float_power等函数一起被列为回退到原生 NumPy 实现的函数详见第 8 节。这意味着它们默认通过onpNumPy计算并返回 NumPy 数组而非 MXNet 原生算子。三、双曲函数sinh、cosh、tanh及其反函数arcsinh、arccosh、arctanh构成双曲函数族。sinh等价于1/2 * (np.exp(x) - np.exp(-x))或-1j * np.sin(1j*x)tanh在深度学习中是常用的激活函数反双曲函数的值域/定义域与 NumPy 保持一致同样仅支持浮点输入。以 multiarray.py 中sinh为例其实现同样委托给底层_mx_nd_np.sinh并遵循输入输出同 dtype、仅支持 float的约定。四、取整与舍入rint、fix、floor、ceil、trunc、around、round_取整类函数解决把浮点数映射到整数的不同策略rint四舍五入到最近的整数遵循银行家舍入偶数优先返回浮点 dtypefloor向下取整不大于元素的最大整数ceil向上取整不小于元素的最小整数trunc向零截断直接丢弃小数部分fix与trunc同义向零方向取整around/round_四舍五入到指定小数位可通过decimals参数控制精度默认decimals0。around与round_的定义见 multiarray.py两者签名均为around(x, decimals0, outNone, **kwargs)。对应测试见 test_np_round覆盖了不同decimals取值与 dtype 组合。五、求和、乘积与差分5.1 归约类sum、prod、cumsum、cumprodsum(a, axisNone, dtypeNone, outNone, keepdimsNone, initialNone, whereNone)在 multiarray.py 中实现是与 NumPysum对齐的归约算子。参数要点axis归约轴None表示对所有元素求和负数从最后一维往前数dtype累加器与返回数组的类型默认是float32与 NumPy 默认不同这是与原生 NumPy 的差异点之一keepdims为True时保留被归约的轴长度为 1便于与输入正确广播initial当前不支持仅接受Noneout输出数组不能自动做类型转换其 dtype 必须与预期输出一致整数类型运算为模运算溢出时不报错空数组求和返回中性元素 0不支持 Python 原生可迭代对象list/tuple作为输入需传入 ndarray。prodmultiarray.py与cumsummultiarray.py具有类似约定。相关测试位于 test_np_sum、test_np_prod、test_np_cumsum覆盖多种 shape、axis、keepdims、累加类型与 hybridize 组合。5.2 忽略 NaN 的归约与累积nansum、nanprod、nancumsum、nancumprod用于在存在NaN时依旧完成求和/求积/累积运算。需要特别说明这四个函数在mxnet.np中属于回退到 NumPy 的实现见 fallback.py它们并非 MXNet 原生算子。使用时返回的是 NumPy 结果若需接入 MXNet 计算图如 autograd请留意这一点。5.3 差分diff与ediff1ddiff(a, n1, axis-1, prependNone, appendNone)计算沿指定轴的 n 阶差分默认一阶、沿最后一维实现于 multiarray.py测试见 test_np_diffediff1d(ary, to_endNone, to_beginNone)将输入展平为一维后计算相邻元素差分并可在首尾拼接额外元素实现于 multiarray.py。5.4 向量叉乘与梯形积分cross、trapzcross(a, b, axisa-1, axisb-1, axisc-1, axisNone)计算两个子向量的叉乘支持通过axisa/axisb/axisc指定参与运算的轴实现于 multiarray.py参数化测试见 test_np_crosstrapz梯形法则数值积分属于回退到 NumPy 的实现见 fallback.py。六、指数与对数exp、expm1、log、log10、log2、log1p、logaddexp指数对数族函数全部逐元素运算exp(x)自然指数expm1(x)exp(x) - 1当x接近 0 时比直接计算exp(x)-1数值更稳定log(x)自然对数实现于 multiarray.pylog10(x)、log2(x)以 10、2 为底的对数log1p(x)log(1 x)当x接近 0 时数值更稳定multiarray.pylogaddexp(x1, x2)log(exp(x1) exp(x2))通过先减去最大值再指数求和的方式避免溢出对softmax类数值稳定计算尤为有用multiarray.py。七、特殊函数与浮点/有理数例程7.1 特殊函数i0i0计算修正贝塞尔函数第一类零阶在信号处理、物理仿真中常见。注意它在mxnet.np中同样通过回退到 NumPy 提供fallback.py回退时还修复了原 docstring 中的失效引用链接见 fallback.py。7.2 浮点例程ldexp(x1, x2)x1 * 2^x2常用于浮点数的快速缩放且是frexp的逆运算multiarray.pycopysign(x1, x2)把x2的符号复制给x1multiarray.pyfrexp将浮点数分解为尾数与 2 的幂指数spacing返回元素与相邻可表示浮点数之间的距离signbit逐元素判断符号位负数为真。其中frexp、spacing、signbit均通过 fallback 回退到 NumPyfallback.py且回退时会对 ufunc 特有的**kwargs文档引用做清理见 fallback.py。7.3 有理数例程gcd与lcmgcd(x1, x2)逐元素返回|x1|与|x2|的最大公约数lcm(x1, x2)逐元素返回|x1|与|x2|的最小公倍数。两者均支持广播语义x1.shape ! x2.shape时需可广播到公共形状实现见 multiarray.py例如np.gcd(12, 20) # 4 np.gcd(np.arange(6, dtypeint), 20) # array([20, 1, 2, 1, 4, 5], dtypeint64)八、算术运算add到floor_divide算术运算类函数以二元运算为主全部支持广播基础运算add(x1, x2)、subtract(x1, x2)、multiply(x1, x2)、divide(x1, x2)、true_divide(x1, x2)、floor_divide(x1, x2)向负无穷方向整除、mod(x1, x2)、fmod(x1, x2)C 风格取模符号随被除数、remainder(x1, x2)、divmod(x1, x2)同时返回商与余数幂运算power(x1, x2)、float_power(x1, x2)返回浮点结果一元运算reciprocal(x)、negative(x)、positive(x)拆分modf(x)返回小数部分与整数部分。这些二元函数定义在 multiarray.py调用链为mxnet.np包装 →_mx_nd_np来自..ndarray.numpy见 multiarray.py→ C 算子。其中float_power、divmod、modf在 fallback.py 中列为回退实现。九、杂项clip、sqrt、cbrt、square、absolute、sign、最值与interpclip(a, a_min, a_max, outNone)逐元素裁剪到[a_min, a_max]区间multiarray.py对应测试 test_np_clipsqrt(x)multiarray.py、cbrt(x)立方根multiarray.py、square(x)multiarray.pyabsolute(x)/fabs(x)绝对值multiarray.pysign(x)逐元素返回符号-1/0/1multiarray.py最值maximum(x1, x2)与minimum(x1, x2)逐元素取大/小NaN 参与比较fmax与fmin忽略 NaN 的逐元素最大/最小实现于 multiarray.pyheaviside(x1, x2)Heaviside 阶跃函数x10 → 0x10 → x2x10 → 1回退到 NumPy 实现nan_to_num(x, copyTrue, nan0.0, posinfNone, neginfNone)将 NaN 与正负无穷替换为有限值可通过nan/posinf/neginf参数定制替换值multiarray.pyinterp(x, xp, fp, leftNone, rightNone, periodNone)一维分段线性插值multiarray.py。要求xp单调递增未指定period时left/right分别指定x xp[0]与x xp[-1]时的返回值默认取端点fp[0]/fp[-1]period用于角度类坐标的周期插值指定后xp会先按xp xp % period归一化排序且left/right被忽略。对应测试见 test_np_interp。十、源码实现链路从 Python 包装到 C 算子理解mxnet.np数学函数的分层实现有助于判断性能特征与使用边界Python 包装层multiarray.py 中每个函数如sin、cos、gcd、interp都带有完整 docstring 与 NumPy 对齐的签名函数体多为一行委托调用return _mx_nd_np.sin(x, outout, **kwargs)。_mx_nd_np来自from ..ndarray import numpy as _mx_nd_npmultiarray.py即命令式imperative模式的 ndarray NumPy 算子命名空间C 算子层以三角函数为例算子通过宏MXNET_OPERATOR_REGISTER_NUMPY_MIXED_TYPE_UNARY注册于 np_elemwise_unary_op_basic.cc例如_npi_sinnp_elemwise_unary_op_basic.cc绑定mshadow_op::sin并通过FGradient关联反向算子如_backward_npi_sin使用ElemwiseGradUseIn从而天然支持 MXNet 的自动求导与混合编程hybridize回退层fallback.py 定义了fallbacks列表凡是暂未提供原生算子的函数unwrap、trapz、nansum、nanprod、cumprod、nancumprod、nancumsum、i0、signbit、frexp、spacing、modf、divmod、heaviside、float_power等都会在模块加载时通过getattr(onp, obj_name)从 NumPy 取出并动态挂载fallback.py并同步修正 docstring 中的无效引用。使用这类函数时得到的是 NumPy 对象无法直接参与 MXNet 算子图与 autograd 的梯度回传这是选择 API 时的重要权衡。十一、正确性与质量保障测试覆盖mxnet.np数学函数的行为由 test_numpy_op.py 中的参数化测试持续守护典型用例包括test_np_sum覆盖 shape、axis、keepdims、输入/累加/输出 dtype 与 hybridize 组合test_np_prod、test_np_cumsum乘积与累积和的正确性test_np_clip、test_np_round裁剪与舍入边界test_np_diff、test_np_cross差分与叉乘在多轴/多 dtype 下的行为test_np_interp一维插值在默认、left/right、period等模式下的结果。这些测试均与 NumPy 参考实现逐元素比对保证了mxnet.np数学函数与 NumPy 语义的一致性。结语mxnet.np的数学函数模块用一套与 NumPy 高度一致的 API覆盖了从三角函数、双曲函数到归约、插值、有理数运算的完整数值计算需求。使用时把握两个关键边界即可游刃有余一是输入输出同 dtype、三角函数仅支持浮点的类型约束二是区分原生算子加速与NumPy 回退实现前者支持 autograd 与图优化后者适合快速原型。在此基础上配合 routines.math.rst 的完整函数清单与 test_numpy_op.py 的测试用例你可以放心地将 NumPy 风格的数值计算代码迁移到 MXNet 中。赞分享人工智能深度学习机器学习【免费下载链接】mxnetLightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more项目地址https://gitcode.com/gh_mirrors/mxne/mxnet点击查看免费下载相关推荐MXNet NumPy 数学函数全集指南mxnet.np 模块三角函数、指数对数、求和与算术运算的用法与实现解析MXNet NumPy 数学函数全集指南mxnet.np 模块三角函数、指数对数、求和与算术运算的用法与实现解析 本文围绕 docs/python_docs/深度学习人工智能机器学习分布式训练SymPy 初等函数模块Elementary Functions全解析复数分解、三角/双曲、指数对数与分段函数的符号计算实战SymPy 初等函数模块Elementary Functions全解析复数分解、三角/双曲、指数对数与分段函数的符号计算实战 SymPy 是一个用纯 Py科学计算符号运算ESP-IDF CORDIC 驱动完全指南用硬件加速三角函数、双曲函数与超越函数计算ESP IDF CORDIC 驱动完全指南用硬件加速三角函数、双曲函数与超越函数计算 CORDICCOordinate Rotation DIgital C物联网嵌入式创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考