第3章 · 数组的创建与dtype体系 本章要回答的三个问题:array、zeros、arange、linspace、random 这些创建函数各适合什么场景、默认 dtype 是什么?dtype 体系怎么读(int32 与 float64 差在哪),转型规则里有哪些静默坑?创建阶段的哪些选择会决定后面所有代码的内存与速度? 为什么会有这一章 第 2 章建立了"数据块 + 描述字段"的模型,本章回到数组的出生现场。创建函数看似最简单,实际是 dtype 事故的第一现场:两个 int32 数组相加在 Windows 上突然变 int32 溢出、整数除法悄悄丢小数、float 数组塞进 None 炸出 object 类型——这些问题全部可以在创建阶段用一行 dtype 参数消掉。
本章要回答的三个问题:array、zeros、arange、linspace、random 这些创建函数各适合什么场景、默认 dtype 是什么?dtype 体系怎么读(int32 与 float64 差在哪),转型规则里有哪些静默坑?创建阶段的哪些选择会决定后面所有代码的内存与速度?
第 2 章建立了"数据块 + 描述字段"的模型,本章回到数组的出生现场。创建函数看似最简单,实际是 dtype 事故的第一现场:两个 int32 数组相加在 Windows 上突然变 int32 溢出、整数除法悄悄丢小数、float 数组塞进 None 炸出 object 类型——这些问题全部可以在创建阶段用一行 dtype 参数消掉。同时,zeros、empty、arange 的"是否初始化内存"各有讲究,empty 的快是有代价的。
本章三节:先横向对比创建路径,再纵深讲 dtype 与转型,最后补齐序列生成与随机数填充。
| 节 | 回答哪个问题 | 关键产出 |
|---|---|---|
| 3.1 五种常用创建路径对比 | 选哪个函数 | 场景到函数的决策表 |
| 3.2 dtype家族与安全转型 | 类型怎么选怎么转 | dtype 字宽表 + casting 坑演示 |
| 3.3 arange-linspace与随机数填充 | 序列与随机怎么造 | 三种序列对比 + Generator 用法 |
问:创建函数十几个,背不下来怎么办?
答:不需要全背,记住四类需求的映射就够了——数值已知 array、占位 zeros 家族、等差 arange 与 linspace、随机 Generator。剩下的都是这四类的变体,用时查文档两分钟搞定。
问:dtype 那么多种,平时用哪几个?
答:九成场景就三个:int64、float64、bool。其余类型出现在特定领域——图像用 uint8、深度学习用 float32、音频用 int16——遇到对应领域自然会用到。
问:astype 不是随便转吗,有什么好讲的?
答:浮点转整数是截断、宽整型转窄整型会环绕、转型必产生拷贝——这三条每一条都制造过真实事故。3.2 节的三个案例都是从故障里提炼的。
数组造好之后的第一件事就是取数。第 4 章用"视图还是拷贝"的尺子逐个检查索引与切片操作——你会发现本章创建的数组,正是下一章所有实验的原材料。