Numpy出现异常行为:含numpy数组的对象无法设置十进制数值
Numpy 数组赋值十进制数值失效的核心原因
Numpy 数组的数据类型(dtype)在数组创建完成后就固定不变,不会因为后续赋值操作自动升级类型,这和Python原生列表的动态类型特性有本质区别:
- 如果你初始化数组时传入的都是整数值,哪怕你没有显式指定dtype,Numpy也会自动推导数组类型为整数类型(比如
int32/int64,具体取决于你的操作系统和初始值范围) - 后续向整数类型数组赋值浮点数时,Numpy会静默执行类型截断,直接丢弃小数部分,不会抛出提示,也不会自动把数组转换为浮点类型,这就是你无法正常设置十进制数值的原因。
问题复现代码
import numpy as np # 无显式dtype指定,初始值全为整数,自动推导为int64类型 arr = np.array([1, 2, 3, 4]) print(arr.dtype) # 输出:int64 # 赋值浮点数会被自动截断 arr[0] = 5.99 print(arr[0]) # 输出:5,小数部分被丢弃
对应解决方案
- 初始化数组时直接显式指定浮点类型:
arr = np.array([1, 2, 3, 4], dtype=np.float64) - 如果数组已经创建完成,先执行类型转换再赋值:
arr = arr.astype(np.float64)
问题现场截图

内容的提问来源于stack exchange,提问作者FourierFlux
相关产品推荐
相关产品推荐

