NumPy dtypes 模块完全指南:DType 类层次与 `register_dlpack_dtype` 注册机制
NumPy dtypes 模块完全指南DType 类层次与register_dlpack_dtype注册机制【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址: https://gitcode.com/gh_mirrors/nu/numpy本文围绕 NumPy 的numpy.dtypes子模块展开系统梳理其提供的全部 DType 类布尔、位宽整数、C 命名整数、浮点、复数、字符串、时间与杂项类型并结合仓库源码与测试用例深入剖析面向 DType 作者的核心 APIregister_dlpack_dtype的注册、冲突检测与往返round-trip机制。读完本文你将掌握用 DType 类进行isinstance检查与直接构造 dtype 的方法以及如何为自己的自定义 dtype 打通 DLPack 导入导出通道。模块定位dtype 的类从哪来numpy.dtypes是 NumPy 中专门承载具体 dtype 相关功能与类的子模块。它的模块级文档见 numpy/dtypes.py给出了清晰的定位说明该模块与 Python 内置的types模块类似定义了一些通常不会直接被广泛使用的类型类更通用的 dtype 信息请参考numpy.dtype与 arrays.dtypes。该模块自NumPy 1.25起引入。在此之前DType 类只能间接访问1.25 之后它们被显式地聚拢到numpy.dtypes命名空间下并通过__all__导出见 numpy/dtypes.pyi 中完整的__all__列表。这些类与对应的 NumPy dtype 实例、NumPy 标量类型一一对应可以用于isinstance检查判断某个 dtype 是否属于特定类型直接实例化或作为np.dtype(...)的参数使用不过对大多数用户而言用np.float64这样的标量类型或float64这样的字符串更常见。在 numpy/_core/tests/test_dtype.py 中有一组专门验证 DType 类行为的测试例如test_integer_alias_names断言numpy.dtypes.Int8DType.type is numpy.int8并验证DType.__name__.lower()与标量类型名的对应关系test_is_numeric则通过type(np.dtype(code))._is_numeric区分数值与非数值 dtype。这些测试印证了 DType 类与标量类型、dtype 实例三者的严格对应关系。DType 类全景按类别逐个对应官方 API 文档 routines.dtypes.rst 将numpy.dtypes中的类按语义划分为八个分组下面逐一展开。布尔Boolean类名对应 dtype / 标量类型码信息BoolDTypenp.bool_kindbchar?num0itemsize1类型存根 numpy/dtypes.pyi 中BoolDType继承自_8Bit对齐与元素大小均为 1 字节与_LiteralDType[np.bool]并固化name bool、str |b1等字面量属性。位宽整数Bit-sized integers按显式位宽命名共 8 个类kind分别为i有符号与u无符号Int8DType/UInt8DTypechar为b/Bnum为 1 / 2Int16DType/UInt16DTypechar为h/Hnum为 3 / 4Int32DType/UInt32DTypechar为i/Inum为 5 / 6Int64DType/UInt64DTypechar为l/q、L/Qnum为 7/9、8/10注意Int32DType的char同时声明了i与lWindows 平台long为 4 字节Int64DType同时声明l与q这体现了不同平台上 C 类型映射的差异。16 位以上的整数类还带有_NativeOrder混入表示其byteorder为本机字节序而 8 位类型为|不区分字节序。C 命名整数C-named integers可能是别名这类类名直接对应 C 语言类型名且可能与位宽整数类是同一个类的别名ByteDType/UByteDType即 8 位整数ShortDType/UShortDType16 位IntDType/UIntDType与平台int宽度一致的 32 位类型LongDType/ULongDType平台相关Windows 上为 32 位、多数 Unix 上为 64 位LongLongDType/ULongLongDType64 位从 numpy/dtypes.py 的_add_dtype_helper(DType, alias)可以看到别名机制该函数把 DType 类注册到numpy.dtypes命名空间时会通过alias.removeprefix(numpy.dtypes.)同时设置别名属性并追加到__all__。该函数由 C 层在初始化时调用见 numpy/_core/src/multiarray/multiarraymodule.c 与 numpy/_core/src/multiarray/dtypemeta.c 中通过_add_dtype_helper注入运行时导入的代码路径。浮点Floating pointFloat16DType16 位半精度浮点np.float16chareFloat32DType32 位单精度np.float32charfFloat64DType64 位双精度np.float64chardLongDoubleDType平台相关的扩展精度浮点np.longdouble即 C 的long double值得注意的细节测试test_float_alias_names_not_present见 numpy/_core/tests/test_dtype.py明确断言numpy.dtypes中不存在HalfDType、FloatDType、DoubleDType这类旧式名称——浮点类只按位宽命名Float16/32/64是唯一形式。复数ComplexComplex64DType由两个 32 位浮点组成的 64 位复数np.complex64Complex128DType由两个 64 位浮点组成的 128 位复数np.complex128CLongDoubleDType对应np.clongdouble元素由两个long double组成位宽随平台而定字符串与字节串Strings and BytestringsStrDTypeUnicode 字符串 dtype对应np.str_charU元素宽度为固定字符数BytesDType字节串 dtype对应np.bytes_charSStringDTypeNumPy 2.0 引入的可变长度字符串 dtypeNEP 55 的实现用于替代固定宽度U/S的常见场景时间TimesDateTime64DType64 位日期时间 dtypenp.datetime64charM需要配合时间单位如M8[ns]使用测试test_scalar_helper_all_dtypes特别注明无单位的M无法直接构造标量否则会触发ValueErrorTimeDelta64DType64 位时间间隔 dtypenp.timedelta64charm其他OthersObjectDType任意 Python 对象 dtypenp.object_charOVoidDType原始字节 / 结构体 dtypenp.voidcharV是结构化数组底层 dtype 的基础类型存根中的类层次设计dtypes.pyi 虽然只是类型提示文件却清晰揭示了 DType 类的内部设计模式对理解类之间的关系很有帮助_SimpleDTypetyping-only 基类描述所有简单 dtype 的公共属性——fields is None、isalignedstruct False、ndim 0、shape ()、subdtype is None并限定只能无参构造__new__(cls, /)。_LiteralDType进一步固化flags 0、hasobject False适用于所有非对象、非 void 的字面量 dtype。_TypeCodes[KindT, CharT, NumT]与_NBit[AlignmentT, ItemSizeT]、_NoOrder/_NativeOrder混入把kind、char、num、alignment、itemsize、byteorder等元数据用字面量类型固化让类型检查器在编译期就能确定每个具体 DType 类的元数据值。每个具体 DType 类均标记final且name、str属性也被声明为字面量如BoolDType.name bool、Int8DType.str |i1。面向 DType 作者的入口register_dlpack_dtype除 DType 类之外numpy.dtypes还导出一个函数级 APIregister_dlpack_dtype__all__中唯一的函数见 numpy/dtypes.py。该函数面向用户自定义 dtype 的作者而非最终用户用于把自定义 dtype 映射到 DLPack 的(code, bits)键从而让numpy.from_dlpack能导入它、ndarray.__dlpack__能导出它。签名与参数def register_dlpack_dtype(dlpack_key, dtype, /):dlpack_key(dl_dtype_code, dl_bits)二元组对应 DLPackDLDataType中的类型码与位宽目前假定 lanes 恒为 1。dtype一个 NumPy dtype 实例如np.dtype(float16)。返回None注册冲突时抛出ValueError。Python 层的实现在 numpy/dtypes.py 中只是薄封装为避免循环导入它在函数体内延迟导入numpy._core._multiarray_umath._register_dlpack_dtype并转发调用。C 层实现位于 numpy/_core/src/multiarray/dlpack.c 的_register_dlpack_dtype并被注册到_multiarray_umath模块见 numpy/_core/src/multiarray/multiarraymodule.c。C 层的校验与注册逻辑从 dlpack.c 的源码可以看到注册过程包含三道关键校验类型码范围code必须在0..255之间否则抛ValueError: DLPack code must be in 0..255.位宽一致性bits必须等于dtype.elsize * 8且elsize 255/8否则抛ValueError。冲突检测双向NumPy 内部维护两张注册表见 numpy/_core/src/multiarray/module_state_fields.h 中的dlpack_export_registry与dlpack_dtype_registrydlpack_export_registry记录dtype - (code, bits)用于导出方向__dlpack__。若同一 dtype 已注册到不同的(code, bits)抛ValueError: this NumPy dtype is already exported with a different DLPack (code, bits).dlpack_dtype_registry记录(code, bits) - dtype用于导入方向from_dlpack。若同一(code, bits)已映射到非同一identical的 dtype同样抛ValueError——但注意此时导出方向的映射仍会被建立这正是文档中While an error is raised, the export is registered even on error的行为来源。调用约定与注意事项内置 dtype 的映射在导入时优先建立注册相同identical的 dtype 重复调用是允许的幂等但一般应在模块导入时完成注册。文档明确警告注册用户必须自行保证映射的有效性——错误地把字符串 dtype 注册为浮点类型码会导致from_dlpack得到错误 dtype 甚至BufferError。该函数最初主要为ml_dtypes如bfloat16等扩展浮点类型添加未来可能被其他机制替代。测试用例行为的具体证据numpy/_core/tests/test_dlpack.py 的TestRegisterDlpackDtype类逐条验证了上述行为test_register_bad_dlpack_tuple传(2,)、三元组、None或字符串而非 dtype 实例均抛TypeErrortest_register_bad_code_or_bits(-1, 16)、(256, 16)、(4, 15)位宽与元素大小不匹配均抛ValueErrortest_register_idempotent对同一 dtype 重复注册同一键不报错test_roundtrip把S1注册为(7, 8)借用kDLFloat8_e3m4的类型码后np.from_dlpack能原样还原S1数组test_register_conflict同一 dtype 改注册到另一键、或另一 dtype 占用同一键时抛ValueError且文档所述即使报错导出映射仍生效的特性也在测试中被确认报错后该数组仍可被导出但无法正确往返test_buffererror_bad_dtype把S3注册为无意义的(123, 24)后删除导入方向映射导出仍成功而from_dlpack抛BufferError。实践小结numpy.dtypes是 NumPy dtype 体系中类层面的统一入口日常使用用BoolDType、Float64DType、DateTime64DType等类做isinstance(np.dtype(float64), np.dtypes.Float64DType)式检查或直接np.dtype(np.dtypes.Float64DType)构造 dtype但通常字符串形式float64已足够无需绕道。平台差异感知IntDType/LongDType等 C 命名类与位宽类互为别名其char/num元数据随平台浮动类型存根已用字面量类型把这些差异固化下来。自定义 dtype 与 DLPack 集成通过register_dlpack_dtype((code, bits), dtype)打通__dlpack__导出与from_dlpack导入注意遵守code ∈ [0, 255]、bits itemsize * 8的硬性校验并在导入时一次性注册、妥善处理可能出现的ValueError冲突。【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址: https://gitcode.com/gh_mirrors/nu/numpy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

BAPI_PRODORD_CHANGE实战:生产订单修改前必做的主数据重读

BAPI_PRODORD_CHANGE实战:生产订单修改前必做的主数据重读

做SAP PP模块开发和对应的增强接口这几年,BAPI_PRODORD_CHANGE是我调用频率最高的几个BAPI之一。生产订单批量改数量、调整计划排程日期、处理物料变更、释放和撤销订单,几乎都会碰到它。但我也见过不止一个同事在这个函数上翻过车:内表里只填…

2026/9/20 13:47:30 阅读更多 →
Open Design 设计系统实战:复刻 Shopify 暗色电影化风格的完整设计规范与 Agent 提示词指南

Open Design 设计系统实战:复刻 Shopify 暗色电影化风格的完整设计规范与 Agent 提示词指南

AI 应用人工智能AI 技能设计系统媒体生成 【免费下载链接】open-design 🎨 Best DeepSeek Harness Design Plugin. The open-source Claude Design alternative. 🖥️ Local-first desktop app. 🖼️ Your coding agent becomes the design e…

2026/9/20 13:47:30 阅读更多 →
微波电子线路课后习题怎么学?从传输线到S参数的思维升级指南

微波电子线路课后习题怎么学?从传输线到S参数的思维升级指南

简介:西电《微波电子线路》课程课后习题答案解析,面向正在学习微波信号产生、传输、混频、放大与倍频等知识的学生及复习备考者。内容覆盖平衡混频器电路分析、本振/信号反相型结构、中频与镜频电流成分、混频器与上变频器差异、微带平衡混频器设计、管子…

2026/9/20 13:47:30 阅读更多 →

最新新闻

Mac 上安装 Claude Code 完整指南:环境配置与避坑实践

Mac 上安装 Claude Code 完整指南:环境配置与避坑实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 18:09:12 阅读更多 →
Cadence 17.2 Allegro 改一段走线线宽总选错?让 Codex 走 TaoToken 对照 Cline segs 与 Clines

Cadence 17.2 Allegro 改一段走线线宽总选错?让 Codex 走 TaoToken 对照 Cline segs 与 Clines

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 18:09:12 阅读更多 →
树莓派系统文件深度解析:config.txt、cmdline.txt与设备树实战

树莓派系统文件深度解析:config.txt、cmdline.txt与设备树实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 18:09:12 阅读更多 →
OpenRouter 用量榜:TaoToken 上跑 Kimi K2.7 Code 选哪条通道

OpenRouter 用量榜:TaoToken 上跑 Kimi K2.7 Code 选哪条通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 18:09:12 阅读更多 →
把 .assets 变成 FBX 和 PNG:AssetRipper 免费 Unity 资源提取实操教程

把 .assets 变成 FBX 和 PNG:AssetRipper 免费 Unity 资源提取实操教程

把 .assets 变成 FBX 和 PNG:AssetRipper 免费 Unity 资源提取实操教程 【免费下载链接】AssetRipper GUI application to analyze game files 项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper AssetRipper 是一款免费的 Unity 资源提取 GUI …

2026/9/20 18:09:12 阅读更多 →
MicroPython pyboard 入门指南:硬件布局、供电方式与首次上电

MicroPython pyboard 入门指南:硬件布局、供电方式与首次上电

嵌入式语言运行时编程语言解释器编译器物联网系统编程 【免费下载链接】micropython MicroPython - a lean and efficient Python implementation for microcontrollers and constrained systems 项目地址: https://gitcode.com/gh_mirrors/mi/micropython 点击查看…

2026/9/20 18:08:11 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →