NumPy浮点数的默认数据类型是什么?如何选择适配浮点类型?
NumPy浮点数默认类型及类型匹配方案
默认浮点数类型
NumPy默认的浮点数类型是双精度64位浮点数,对应别名为np.float_,底层和C语言标准的double类型完全对应。在所有主流桌面、服务器端64位系统(x86_64/arm64架构的Windows、macOS、Linux)上,这个类型和np.float64是等价的。
别踩坑:NumPy不会默认使用32位单精度浮点数
np.float32,别想当然传错类型平白损失精度。
显式传dtype时的匹配方法
np.fromiter()这类要求必须显式指定dtype的函数,按你的实际场景选对应写法就行:
- 如果你要和NumPy全局默认浮点类型对齐,直接传
dtype=np.float_就对了。没必要硬写np.float64,虽然绝大多数场景下两者效果一样,但np.float_会自动适配当前NumPy编译环境的默认浮点定义,兼容性更好。要是图省事传Python内置的float当dtype,效果和np.float_完全一致,只是可读性稍差。 - 如果你要和代码里已经存在的NumPy浮点数组保持类型一致,最稳妥、零出错的方式是直接取已有数组的
.dtype属性传进去,参考代码:
import numpy as np # 代码中已有的浮点数组,可能是float16/float32/float64任意精度 existing_arr = np.array([1.2, 3.4, 5.6], dtype=np.float32) # 从迭代器生成新数组,类型和已有数组完全匹配 new_arr = np.fromiter(iter([7.8, 9.0, 1.2]), dtype=existing_arr.dtype)
这种写法完全不需要你手动记已有数组的具体浮点精度,从根源上避免隐式类型转换带来的精度损失、内存异常、计算结果偏差等问题。
内容的提问来源于stack exchange,提问作者asdfasdfsdf
相关产品推荐
相关产品推荐

