
深度学习人工智能机器学习分布式训练【免费下载链接】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/mx/mxnet点击查看免费下载mxnet.np.linalg是 MXNet 深度学习中面向 NumPy 用户提供的线性代数子模块它把dot、svd、cholesky、eig、solve、inv等经典数值例程统一封装在mxnet.np命名空间中底层由 BLAS 与 LAPACK 高性能库驱动。本文以 routines.linalg.rst 的官方 API 参考为骨架结合 python/mxnet/numpy/linalg.py 的 Python 实现与 src/operator/tensor/la_op-inl.h 的 C 算子源码完整梳理其六大类函数、参数语义、LAPACK 调用链以及与 NumPy 的行为差异帮助你在模型开发、矩阵分解与方程求解场景中直接上手。背景为什么线性代数例程依赖 BLAS 与 LAPACKNumPy 兼容的线性代数函数之所以能保持高效是因为它们建立在 BLASBasic Linear Algebra Subprograms与 LAPACKLinear Algebra PACKage之上由这两类底层库提供标准线性代数算法的高性能实现。根据官方 API 参考页面的说明这些库可能由 NumPy 自身携带的参考实现子集提供但在可行的情况下优先使用能够充分利用专用处理器特性的高度优化库例如 OpenBLAS、Intel MKL 与 ATLAS。这一设计有两层关键影响多线程与处理器相关性这些库是线程化且依赖具体处理器的因此可能需要借助环境变量或threadpoolctl这类外部包来控制线程数或指定处理器架构以取得稳定的性能表现。一致的底层依赖MXNet 的mxnet.np.linalg在 C 算子层同样直接调用 LAPACK 例程详见下文因此在数值行为、误差范围与性能特征上与 NumPy 保持了同源的一致性。模块入口与命名空间所有函数都通过mxnet.np.linalg访问例如from mxnet import np from numpy import linalg as LA a np.arange(9).reshape((3, 3)) print(LA.det(a)) print(LA.norm(a))从源码看python/mxnet/numpy/linalg.py 通过__all__导出了全部例程并且__all__ fallback_linalg.__all__将 python/mxnet/numpy/fallback_linalg.py 中回退实现的函数一并纳入保证了一组尽量完整的命名空间其中部分函数如matrix_rank、pinv、eigvalsh、eigh还带有wrap_data_api_linalg_func装饰器用于对齐 Python 数组 API 标准Array API Standard的签名约定。矩阵与向量乘积类例程Matrix and vector products该分类覆盖日常张量运算中最常用的积运算完整清单如下函数作用dot点积 / 矩阵乘法vdot展平后向量的点积inner内积outer外积tensordot指定轴上的张量收缩einsumEinstein 求和约定linalg.multi_dot多矩阵连乘matmul批量矩阵乘法linalg.matrix_power矩阵幂kronKronecker 积其中outer、tensordot等在 python/mxnet/numpy/linalg.py 中均有直接实现。例如outer的实现是调用tensordot(a.flatten(), b.flatten(), 0)即把两个输入展平为一维向量后做 0 轴张量收缩从而得到形状为(N, M)的外积矩阵 x np.linalg.outer(np.ones((5,)), np.linspace(-2, 2, 5)) x array([[-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.]])tensordot的axes参数语义与 NumPy 一致若为整数N则对a的最后N个轴与b的前N个轴按序收缩对应轴的尺寸必须匹配N0得到外积N1得到张量点积N2默认值得到张量双重收缩。也支持显式传入轴序列例如axes([1,0],[0,1]) x np.arange(60.).reshape(3,4,5) y np.arange(24.).reshape(4,3,2) z np.linalg.tensordot(x, y, axes([1,0],[0,1])) z.shape (5, 2)分解类例程Decompositionslinalg.svd奇异值分解svd将二维矩阵分解为ut diag(s) v其中ut与v为正交矩阵s为按降序排列的奇异值一维数组。对于高于二维的输入采用广播规则下的 stacked 模式遍历前a.ndim - 2个维度的所有索引对最后两维逐一做 SVD。矩阵可依据(ut * s[..., None, :]) v或ut (s[..., None] * v)重建为批量矩阵乘法。源码中明确指出底层使用 LAPACK 例程_gesvd且与 NumPy 存在两点差异python/mxnet/numpy/linalg.pyu、v的行符号可能与 NumPy 不同符号确定方式参见论文Auto-Differentiating Linear Algebra不支持复数输入。 a np.arange(54).reshape(6, 9) ut, s, v np.linalg.svd(a) ut.shape, s.shape, v.shape ((6, 6), (6,), (6, 9))linalg.choleskyCholesky 分解cholesky返回对称正定矩阵a的下三角因子L满足L * L.T a。upper参数默认False是数组 API 标准新增的签名置为True时返回上三角因子。当a非正定时抛出MXNetError。Cholesky 常用于对称正定方程组的快速求解先解L y b再解L.T x y。 A np.array([[16, 4], [4, 10]]) L np.linalg.cholesky(A) L array([[4., 0.], [1., 3.]]) np.dot(L, L.T) array([[16., 4.], [ 4., 10.]])linalg.qrQR 分解qr将矩阵分解为q r其中q正交、r上三角。目前仅实现默认模式reduced设K min(M, N)返回的q形状为(..., M, K)r形状为(..., K, N)。注意梯度仅在输入矩阵的前K列线性无关时有良好定义。 a np.random.uniform(-10, 10, (2, 2)) q, r np.linalg.qr(a) q array([[-0.22121978, -0.97522414], [-0.97522414, 0.22121954]]) r array([[-4.4131265 , -7.1255064 ], [ 0. , -0.28771925]])矩阵特征值类例程Matrix eigenvalues函数说明底层 LAPACKlinalg.eig一般方阵的特征值与右特征向量_geevlinalg.eigvals仅返回一般方阵的特征值_geevlinalg.eigh实对称矩阵的特征值与特征向量_syevdlinalg.eigvalsh仅返回实对称矩阵的特征值_syevdeig/eigvals面向一般非对称实矩阵特征值不保证有序eig返回的v[:, i]是特征值w[i]对应的归一化右特征向量满足dot(a, v[:,i]) w[i] * v[:,i]。eigh/eigvalsh面向实对称矩阵特征值按升序排列。这两组函数都不支持复数输入输出python/mxnet/numpy/linalg.py、python/mxnet/numpy/linalg.py。eigvalsh与eigh通过upper布尔参数映射到 LAPACK 的UPLO选项upperFalse时UPLOL使用矩阵下三角部分默认upperTrue时UPLOU使用上三角部分无论取何值对角线只考虑实部以保持 Hermitian 矩阵的语义python/mxnet/numpy/linalg.py。 a np.array([[-1.9147992 , 6.054115 , 18.046988 ], ... [ 0.77563655, -4.860152 , 2.1012988 ], ... [ 2.6083658 , 2.3705218 , 0.3192524 ]]) w, v np.linalg.eig(a) w array([ 6.9683027, -7.768063 , -5.655937 ])C 算子层的实现位于 src/operator/tensor/la_op-inl.h例如syevd结构体封装了对称特征分解的工作区查询与批量调用逻辑la_op-inl.h#L509-L532syevd_backward则实现了其反向传播la_op-inl.h#L1026说明这些例程不仅可执行前向数值计算还接入了 MXNet 的自动微分体系。范数与数值量例程Norms and other numbers函数作用linalg.norm矩阵或向量范数trace对角线与偏移对角线之和linalg.cond矩阵条件数linalg.det行列式linalg.matrix_rank基于 SVD 的矩阵秩linalg.slogdet行列式的符号与自然对数norm当前仅支持 Frobenius 范数ordfro定义为||A||_F [sum_{i,j} abs(a_{i,j})^2]^{1/2}。axis接受整数按该轴计算向量范数、2 元组按两轴计算矩阵范数或None整体范数keepdimsTrue时被归约的轴保留为尺寸 1便于与原始x正确广播。与 NumPy 的一个差异是在 NumPy 期望返回 Python 浮点数的场合此算子总是返回零维张量python/mxnet/numpy/linalg.py。此外还提供数组 API 标准新增的vector_norm与matrix_norm前者支持ord为任意非零整数、inf、-inf以及多轴批量计算后者要求axis为 2 元组否则抛出ValueErrorpython/mxnet/numpy/linalg.py。det与slogdet都基于 LU 分解LAPACK 例程z/dgetrf实现。slogdet返回(sign, logdet)其中sign为 1、0 或 -1logdet为行列式绝对值的自然对数行列式等于sign * exp(logdet)当行列式为 0 时sign0、logdet-Inf。它比det更稳健——对于值极大或极小的行列式det可能上溢或下溢而slogdet不会 np.linalg.det(np.eye(500) * 0.1) 0.0 np.linalg.slogdet(np.eye(500) * 0.1) (1., -1151.2925464970228)matrix_rank返回大于阈值rtol的奇异值个数。若rtolNone则自动取S.max() * max(M.shape) * epsS为M的奇异值数组eps为数据类型对应的机器精度hermitianTrue时假定输入为 Hermitian实对称矩阵以采用更高效的奇异值求法python/mxnet/numpy/linalg.py np.linalg.matrix_rank(np.eye(4)) # 满秩 4 I np.eye(4); I[-1, -1] 0. # 秩亏缺矩阵 np.linalg.matrix_rank(I) 3trace的offset参数指定相对主对角线的偏移offset0为主对角线offset0为主对角线上方offset0为下方。对形状为(..., M, N)的输入输出去掉最后两维并把各矩阵的迹放在最后一个维度。方程求解与矩阵求逆类例程Solving equations and inverting matrices函数作用底层 LAPACKlinalg.solve解满秩方阵线性方程组ax b_gesvlinalg.tensorsolve解张量方程a x b—linalg.lstsq最小二乘解SVD 驱动linalg.inv方阵求逆—linalg.pinvMoore-Penrose 伪逆基于 SVD—linalg.tensorinvN 维张量的 tensordot 逆—solve要求a为方阵且满秩b可以是一维或二维返回形状与b相同a奇异或非方阵时抛出MXNetError。若矩阵不满秩或欠定/超定则应改用lstsq获取最小二乘意义下的最佳解 a np.array([[3, 1], [1, 2]]) b np.array([9, 8]) x np.linalg.solve(a, b) x array([2., 3.]) np.allclose(np.dot(a, x), b) Truelstsq通过最小化残差平方欧氏 2-范数||b - a x||_2^2求解可处理欠定、正定与超定方程组。其rcond参数是奇异值截断比例奇异值小于rcond倍最大奇异值时视为零rcondwarn或-1时使用机器精度None时使用max(M, N)倍机器精度。返回值依次为解x、残差平方和residuals、矩阵秩rank与奇异值数组spython/mxnet/numpy/linalg.py。pinv计算 Moore-Penrose 伪逆若Q1 Σ Q2^T A是A的奇异值分解则A^ Q2 Σ^ Q1^T其中Σ^由非零奇异值的倒数构成。rtol为小奇异值截断奇异值不超过rtol * largest_singular_value的置零hermitianTrue时按 Hermitian 假设加速。可以验证伪逆的两个基本性质a * a * a a与a * a * a a a np.random.randn(2, 3) pinv_a np.linalg.pinv(a) (a - np.dot(a, np.dot(pinv_a, a))).sum() array(0.) (pinv_a - np.dot(pinv_a, np.dot(a, pinv_a))).sum() array(0.)tensorinv返回张量a关于tensordot运算的逆要求prod(a.shape[:ind]) prod(a.shape[ind:])ind默认 2结果形状为a.shape[ind:] a.shape[:ind]。tensorsolve求解a x b要求a的形状为b.shape Q且prod(Q) prod(b.shape)axes参数可指定在求逆前需要重排到右侧的轴默认不重排。源码实现与 LAPACK 调用链一览mxnet.np.linalg的完整调用路径可以分为三层Python API 层python/mxnet/numpy/linalg.py 定义面向用户的函数负责参数整理如upper - UPLO映射、offset透传与 docstring 语义约束最终转调mxnet.ndarray.numpy.linalg_mx_nd_np.linalgNDArray 算子层python/mxnet/ndarray/numpy/linalg.py 将函数映射到注册的 NDArray 算子C 实现层src/operator/tensor/la_op-inl.h 与 src/operator/tensor/la_op.cc 中封装 LAPACK 例程包括gesvdSVD、gesv线性求解、getrfLU 分解、syevd对称特征分解、geev一般特征分解等并实现对应的反向传播从而支持在 MXNet 自动微分图中直接使用这些线性代数算子。由此可以看到文档中这些函数依赖 BLAS 与 LAPACK的说明并非仅适用于 NumPy——MXNet 在同一套底层库之上为深度学习场景补齐了可求导的线性代数算子。使用建议与注意事项复数支持当前svd、eig、eigh、eigvals、eigvalsh、cholesky等均不支持复数输入输出设计算法时需注意数据类型范数范围linalg.norm目前仅支持 Frobenius 范数需要 1-范数、inf-范数等更丰富的向量/矩阵范数时优先使用vector_norm与matrix_norm数值稳定性计算极大或极小行列式时优先使用slogdet矩阵接近奇异时优先使用lstsq/pinv而非直接solve/inv线程控制底层 BLAS/LAPACK 库是多线程且处理器相关的如遇性能波动可通过环境变量或threadpoolctl控制线程数与处理器架构返回类型与 NumPy 不同norm等例程在期望 Python 标量的场景下返回零维张量做标量比较或索引前可能需要显式取出。赞分享深度学习人工智能机器学习分布式训练【免费下载链接】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/mx/mxnet点击查看免费下载相关推荐NumPy 线性代数模块numpy.linalg完全指南BLAS/LAPACK 底层、核心 API 与矩阵堆叠广播NumPy 线性代数模块numpy.linalg完全指南BLAS/LAPACK 底层、核心 API 与矩阵堆叠广播 numpy.linalg 是 NumP科学计算数据分析AI System中的数学原理从线性代数到深度学习算法AI System中的数学原理从线性代数到深度学习算法 在当今人工智能快速发展的时代理解AI System背后的数学原理是掌握深度学习技术的关键。本指南将带比特币开发者必备python-bitcoinrpc安装与配置的完整指南比特币开发者必备python bitcoinrpc安装与配置的完整指南 python bitcoinrpc是比特币开发者必备的Python库它提供了与比特币区块链创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考