Numpy 常用数据类型 dtype

Evan Zhou

Tech Chronicles|Jul 16, 2025|Last edited: Dec 31, 2025|
type
status
date
slug
summary
tags
category
icon
password
comment

为什么要关注 dtype?

  • 用 numpy 处理数据时,dtype 决定了内存占用和精度。
  • 很多“奇怪报错”其实就是类型不兼容,或者数值溢出/精度丢失。
  • 比如 float64 和 int32 都能存数字,但本质很不同。

numpy 常见 dtype 一览

这一部分没必要死记,但常用的那些需要知道:
  • int8, int16, int32, int64:有符号整数,不同字节,范围越来越大,内存也越来越大。
  • uint8, uint16, ...:无符号,只能存正数,范围大一倍(比如图像处理中常用 uint8 表示 0-255)。
  • float16, float32, float64:小数,精度和存储空间依次递增。float64 最常见、最通用,float32 适合神经网络场景、节省内存。
  • complex64, complex128:复数(其实就是两个 float 拼一起)。
  • bool:True/False,虽然理论上 1bit 就够,numpy 实际占 1字节。
  • object:万能类型,实际上很慢,只有非规整结构才用。
  • string_ / unicode_:numpy 支持定长字符串(S10、U10),其实很少用,数据表或文本更推荐 object。

dtype 的实际用法(Python 演示)


什么时候用什么类型?

  • 内存敏感(大数据量/深度学习):用 float32、int32,甚至 uint8(比如图像、mask)。
  • 需要高精度科学计算:float64、int64。
  • 做索引/分组:int32 足够(pandas 默认 int64)。
  • 布尔数组:bool,常用于掩码(mask)、筛选。
  • 字符串、杂项:数据规整就用 string_,否则 object。

一些实际踩坑体会

  • int/float 混用运算:结果会自动升级为 float。
  • float16/float32 精度问题:比如 (0.1 + 0.2 != 0.3) 这种,机器学习和科学计算有坑。
  • astype 强制转换:小心数据截断,特别是 float -> int 会直接去掉小数。
  • pandas 默认都是 float64/int64,但其实很多场景降级为 float32 更省内存。
  • bool 用于掩码选择很高效,但存储不是最省(不是1bit,是1byte)。

dtype 选择总结

  • 默认 float64、int64 就够用,内存压力大了再考虑 float32、int32。
  • 图像/掩码类适合 uint8。
  • 机器学习/深度学习建议 float32,float16 训练速度快但精度低(慎用)。
  • 字符串杂项 object/string_,一般做文本分析推荐 object。

小结

不用一上来就纠结类型,但出错/数据大了/速度慢时,一定要排查 dtype。
平时善用 .astype(),多看 arr.dtype,遇到奇怪的类型报错,记得查文档或 print(type/值/arr.dtype)。
Loading...