ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MXNet mxnet.np 数组创建例程(Array Creation Routines)完全指南:从零值、数值区间到矩阵构造

MXNet mxnet.np 数组创建例程(Array Creation Routines)完全指南:从零值、数值区间到矩阵构造 深度学习人工智能机器学习分布式训练【免费下载链接】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 的 NumPy 兼容接口mxnet.np中数组创建Array Creation Routines一族 API 展开覆盖全零/全一/空数组、从既有数据创建、数值区间生成与矩阵构造四大类共 20 余个函数。读者阅读后可掌握mxnet.np与标准 NumPy 在默认 dtype、device参数、已实现/未实现函数上的差异并能在 CPU/GPU 设备上直接以 NumPy 风格编写 MXNet 张量初始化代码。文中所有参数说明均取自当前仓库源码 docstring并标注了对应实现文件路径方便深入查阅。一、总览mxnet.np 数组创建 API 家族mxnet.np是 MXNet 提供的 NumPy 兼容命名空间详见 API 索引其数组创建例程在文档中被划分为六个类别对应 routines.array-creation.rst类别已实现有独立 API 文档文档中列出但尚未实现的占位项Ones and zeroseyeemptyfullidentityonesones_likezeroszeros_likefull_like、empty_like同类别内仍已实现From existing dataarraycopyfrombufferfromfunctionfromiterfromstringloadtxtCreating record arrays—np.reccore.records.array/fromarrays/fromrecords/fromstring/fromfileCreating character arrays—np.charcore.defchararray.array/asarrayNumerical rangesarangelinspacelogspacemeshgridgeomspacemgridogridBuilding matricestrildiagdiagflattritriuvander说明在 RST 文档语法中autosummary块内的函数是当前仓库中已实现并生成独立 API 文档的条目而.. code::块中的名字如frombuffer、geomspace、vander等是文档按 NumPy 手册结构预留的 API 面表示在mxnet.np中尚未提供对应实现或仅通过 fallback 机制间接可用。下文会区分对待避免误导。这些函数的 Python 侧实现集中位于 python/mxnet/numpy/multiarray.py数值区间辅助函数meshgrid位于 python/mxnet/numpy/function_base.py少数未实现函数通过 python/mxnet/numpy/fallback.py 包装标准 NumPy 实现。二、先理解两个贯穿全局的参数dtype与device阅读源码 docstring 可以发现mxnet.np几乎所有创建类函数都带dtype与device两个可选参数且与标准 NumPy 有明显差异这是使用本族 API 前必须建立的心智模型。2.1 默认 dtypefloat32 优先可用 npx.set_np 切换标准 NumPy 创建函数默认float64而深度学习框架普遍以float32为默认精度。mxnet.np采用框架默认 float32可一键切回 NumPy 语义的策略由npx.is_np_default_dtype()决定当npx.is_np_default_dtype()返回False默认状态时empty/zeros/ones/array/eye/linspace等默认 dtype 为float32当调用npx.set_np(dtypeTrue)后返回True时默认 dtype 切换为float64arange则切换为int64。以 empty 的实现 为例if dtype is None or dtype is float: dtype _np.float64 if is_np_default_dtype() else _np.float32而 array 的实现 则区分输入类型输入为numpy.ndarray时优先继承其 dtype输入为普通序列list/tuple时按上述规则取默认 dtype np.array([1, 2, 3]).dtype dtype(float32) npx.set_np(dtypeTrue) np.array([1, 2, 3]).dtype dtype(float64)arange的默认 dtype 规则略有不同源码注释明确指出multiarray.py#L6976-L7037默认 dtype 语义下输出 float32npx.set_np(dtypeTrue)后输出 int64。2.2 device 参数显式指定分配设备所有创建类函数都支持device参数Python 侧通过wrap_ctx_to_device_func装饰器同时兼容旧的ctx参数默认取mxnet.device.current_device()。例如在 GPU 上分配全一张量import mxnet as mx from mxnet import np a np.zeros((256, 256), devicemx.gpu(0)) b np.ones((128,), dtypefloat16, devicemx.gpu(0))与 NumPy 只能在主机内存分配不同mxnet.np的张量可以直接分配在 GPU 显存中且后续算子调度也发生在该设备上这是 MXNet NumPy 接口用于深度学习训练/推理的关键能力。分配底层走_new_alloc_handlemultiarray.py#L117-L155当 MXNet 以USE_INT64_TENSOR_SIZE1构建时调用MXNDArrayCreate64支持超过 2^31 个元素的大张量否则会在 Python 端提前抛错提示。三、Ones and zeros全零、全一、空数组与单位矩阵这一类覆盖最常用的张量初始化场景zeros、ones、empty、full及各自的*_like变体加上单位矩阵eye与identity。3.1 zeros / ones / full / empty四个函数签名完全对齐 NumPynp.zeros(shape, dtypeNone, orderC, deviceNone) np.ones(shape, dtypeNone, orderC, deviceNone) np.full(shape, fill_value, dtypeNone, orderC, deviceNone, outNone) np.empty(shape, dtypeNone, orderC, deviceNone)shape可以是整数或整数元组如(2, 3)或2order目前只支持C行优先传入其他值会抛出NotImplementedError见 empty 实现这也是与 NumPy 的一个差异点empty不做初始化返回任意内存数据适合马上要被覆盖的临时缓冲区场景例如 np.empty([2, 2]) array([[ 0.000000e00, -2.524355e-29], [ nan, -8.592023e09]]) # uninitializedfull额外接受fill_value与out预分配输出可快速构造常数填充张量np.full((2, 2), 3.14)。3.2 *_like 家族按已有数组的形状与 dtype 创建zeros_like、ones_like、empty_like、full_like接收一个prototype数组返回与其 shape可通过shape覆盖和 dtype 一致的新数组np.zeros_like(a, dtypeNone, orderC, deviceNone, outNone) np.full_like(a, fill_value, dtypeNone, orderC, deviceNone, outNone)典型用法是在模型初始化时生成与权重同构的梯度/掩码张量w np.random.uniform(size(64, 64)) mask np.ones_like(w) # 形状、dtype 均与 w 一致 buffer np.empty_like(w) # 复用形状的未初始化缓冲区3.3 单位矩阵eye 与 identitynp.eye(N, MNone, k0, dtypeNone, deviceNone)生成 N 行 M 列默认 MN的二维数组k控制对角线偏移——k0主对角线、正值为上对角线、负值为下对角线multiarray.py#L6204-L6242 np.eye(3, k1) array([[0., 1., 0.], [0., 0., 1.], [0., 0., 0.]]) np.eye(2, dtypeint) array([[1, 0], [0, 1]], dtypeint64)np.identity(n, dtypeNone, deviceNone)等价的方阵快捷方式内部等价于eye(n, n)常用于初始化正交约束的权重矩阵。四、From existing data从 Python 序列与已有数组创建这一类解决如何把已有数据变成 mxnet.np 张量的问题核心是array与copy。4.1 array通用的张量构造入口array 函数 接受 array-like 对象嵌套 list/tuple、numpy.ndarray、mxnet.np.ndarraydtype 规则见 2.1 节。实现上先通过标准 NumPy 做数据校验与转换出错时透传 NumPy 的 TypeError 信息再在目标device上分配empty并用切片赋值填充np.array([[1, 2], [3, 4]]) # 默认 float32 np.array([[1, 0], [0, 1]], dtypebool) np.array([1, 2, 3], devicemx.gpu(0))注意从旧式mx.nd.NDArray直接构造会抛出ValueError源码明确提示应改用零拷贝的as_np_ndarray函数multiarray.py#L2754-L2756raise ValueError(If youre trying to create a mxnet.numpy.ndarray from mx.nd.NDArray, please use the zero-copy as_np_ndarray function.)这一限制是为了保证mxnet.np与 NumPy 语义严格对齐避免隐式拷贝。4.2 copy显式复制np.copy(a)multiarray.py#L12930返回与输入数据相同的新数组用于在需要断开视图共享、避免原地修改影响原张量时显式复制。4.3 尚未实现的占位函数文档中列出的frombuffer、fromfunction、fromiter、fromstring、loadtxt等从数据源/文件创建函数目前没有在mxnet.np中提供实现仅作为 API 面占位列出。仓库中的 I/O 模块 python/mxnet/numpy/io.py 目前仅实现了genfromtxt其做法是调用标准 NumPy 再包装为mxnet.np.ndarray并附加device参数ret onp.genfromtxt(*args, **kwargs) return array(ret, dtyperet.dtype, devicedevice)因此若需要从文本/二进制文件加载数据当前推荐路径是先使用标准 NumPy 读取再通过np.array(...)转换到目标设备。五、Numerical ranges等间距数值序列用于生成采样点、索引网格等规则数列是数据预处理与可视化中最常用的一类函数。5.1 arange按步长生成np.arange(start, stopNone, step1, dtypeNone, deviceNone)multiarray.py#L6976-L7037在半开区间[start, stop)内按固定步长生成值语义与 Python 内置range一致但返回张量 np.arange(3) array([0., 1., 2.]) np.arange(3, 7, 2) array([3., 5.])浮点参数时结果长度为ceil((stop - start)/step)由于浮点舍入末元素可能略大于stop与 NumPy 行为一致。底层直接透传_mx_nd_np.arange算子。5.2 linspace按样本数生成含端点控制np.linspace(start, stop, num50, endpointTrue, retstepFalse, dtypeNone, axis0, deviceNone)multiarray.py#L6249在闭区间[start, stop]或endpointFalse时的半开区间内均匀生成num个样本 np.linspace(2.0, 3.0, num5) array([2. , 2.25, 2.5 , 2.75, 3. ]) np.linspace(2.0, 3.0, num5, endpointFalse) array([2. , 2.2, 2.4, 2.6, 2.8]) np.linspace(2.0, 3.0, num5, retstepTrue) (array([2. , 2.25, 2.5 , 2.75, 3. ]), 0.25)retstepTrue时返回(samples, step)二元组step为相邻样本间距。axis参数用于start/stop为数组时指定采样轴插入位置默认 0 表示在开头插入新轴-1表示在末尾。源码 docstring 还给出了结合matplotlib绘制端点对比图的示例。5.3 logspace对数刻度序列np.logspace(start, stop, num50, endpointTrue, base10.0, dtypeNone, axis0, deviceNone)multiarray.py#L6341生成以base为底的等比数列即输出值等于base ** linspace(start, stop, num)常用于学习率扫描、频率轴刻度等场景。5.4 meshgrid坐标网格np.meshgrid(*xi, indexingxy, sparseFalse, copyTrue)python/mxnet/numpy/function_base.py由多个一维坐标向量生成 N 维坐标网格供向量化求值使用。核心行为indexingxy默认笛卡尔索引2D 时输入长度 M、N 输出 shape 为(N, M)indexingij矩阵索引输出 shape 为(M, N)等价于x[i, j]的逐点取值方式sparseTrue与copyFalse当前未实现传入会抛出NotImplementedError源码 function_base.py#L86-L90 中显式raise这与 NumPy 存在差异使用时需注意实现上先用reshape把每个输入扩展为单例轴 自身长度的形状再通过broadcast_arrays广播为完整网格。典型用法绘制二维函数曲面前的网格构造x np.arange(-5, 6) y np.arange(-5, 6) xv, yv np.meshgrid(x, y, indexingij) z np.sin(xv**2 yv**2)文档中列出的geomspace几何空间序列、mgrid/ogrid网格对象快捷写法目前在mxnet.np中尚未实现。六、Building matrices三角矩阵与对角线矩阵6.1 tril下三角矩阵np.tril(m, k0)multiarray.py#L6713返回输入矩阵的下三角部分k控制对角线偏移k0保留主对角线及以下k0额外保留上方 k 条对角线k0从下方第 k 条对角线开始保留。常用于构造因果掩码如自回归模型中的注意力掩码 m np.arange(1, 10).reshape(3, 3) np.tril(m) array([[1., 0., 0.], [4., 5., 0.], [7., 8., 9.]])6.2 同族的占位与已实现函数文档的Building matrices类别中autosummary只列入了已实现的trildiag提取/构造对角线、diagflat展平后铺成对角阵、tri生成下三角 0/1 矩阵、triu上三角矩阵实现见 multiarray.py#L6950、vander范德蒙德矩阵则分别处于不同实现状态diag、diagflat、tri、triu在 multiarray.py 中均有实现如diag在 L12995属于已实现但文档以 code 块列出的条目vander通过 fallback.py 机制回退到标准 NumPy 实现见 fallbacks 列表。七、np.rec 与 np.char预留的记录数组与字符数组文档在Creating record arrays (np.rec)与Creating character arrays (np.char)两节中参照 NumPy 手册列出了记录数组core.records.array/fromarrays/fromrecords/fromstring/fromfile与字符数组core.defchararray.array/asarray的 API 面并注明np.rec是np.core.records的推荐别名、np.char是np.core.defchararray的推荐别名。需要明确的是在mxnet.np中这些条目仅作为文档占位出现位于.. code::块中没有对应的 autosummary 生成文档当前仓库并未实现结构化记录数组与字符数组的专用张量类型。如果业务代码依赖np.rec/np.char应先在标准 NumPy 中完成相关操作再通过np.array转回mxnet.np张量。八、未实现函数的兜底机制fallback.py为弥合与 NumPy 的 API 差距mxnet.np在 python/mxnet/numpy/fallback.py 中维护了一个fallbacks列表包含vander、roots、searchsorted、trapz等一大批函数模块加载时通过get_func包装标准 NumPy 的对应函数并继承其 docstringfor obj_name in fallbacks: onp_obj getattr(onp, obj_name) if callable(onp_obj): new_fn_doc onp_obj.__doc__ setattr(fallback_mod, obj_name, get_func(onp_obj, new_fn_doc))这意味着文档 code 块中列出的部分函数如vander虽无独立实现但可通过 fallback 直接调用标准 NumPy 逻辑返回的仍是numpy.ndarray需要时可用np.array转回 MXNet 张量。使用前建议先hasattr(np, name)确认当前构建版本是否包含该 fallback。九、实战小结初始化张量的推荐模式综合以上分析在 MXNet 中初始化张量的推荐模式可归纳为定值填充np.zeros/np.ones/np.full并显式传入dtype与device避免依赖全局默认 dtype 状态形状复用用*_like家族基于已有张量生成同构掩码/缓冲区规则序列等步长用np.arange定样本数用np.linspace需要步长时配合retstepTrue对数刻度用np.logspace网格与三角掩码np.meshgrid注意sparse/copy参数暂不支持与np.tril数据导入优先np.array(list/numpy.ndarray)mx.nd.NDArray必须经as_np_ndarray转换文本数据可先用np.genfromtxt或标准 NumPy 读取再转换。所有函数均以device参数支持 CPU/GPU 分配dtype 语义可通过npx.set_np(dtypeTrue)一键切换为与标准 NumPy 完全一致float64/int64这为从纯 NumPy 代码迁移到 MXNet 提供了平滑路径。参考资料API 文档主页docs/python_docs/python/api/np/index.rst本文主题文档docs/python_docs/python/api/np/routines.array-creation.rst主要实现python/mxnet/numpy/multiarray.py数值区间辅助实现python/mxnet/numpy/function_base.py兜底回退实现python/mxnet/numpy/fallback.pyI/O 辅助实现python/mxnet/numpy/io.py赞分享深度学习人工智能机器学习分布式训练【免费下载链接】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点击查看免费下载相关推荐CuPy 数组创建例程完全指南从空数组、数值区间到矩阵构造的 GPU 实践CuPy 数组创建例程完全指南从空数组、数值区间到矩阵构造的 GPU 实践 本指南围绕 CuPy 官方 API 参考中的 Array creation rou科学计算高性能计算NumPy 数组创建例程全指南从形状、数值与已有数据构造 ndarrayNumPy 数组创建例程全指南从形状、数值与已有数据构造 ndarray 本文是 NumPy 官方参考手册 routines.array creation.r科学计算数据分析SymPy 矩阵操作完全指南从 Matrix 构造、基本运算到零值测试陷阱SymPy 矩阵操作完全指南从 Matrix 构造、基本运算到零值测试陷阱 本文是 SymPy 官方入门教程 doc/src/tutorials/intro科学计算符号运算创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表