NumPy数组角度转弧度后精度丢失(显示为0)问题求助
解决NumPy数组角度转弧度后结果全为0的问题
你遇到的这个问题我之前也碰到过,核心是数组的数据类型(dtype)在搞怪!
问题原因
你最开始创建的数组A应该是整数类型(比如int64),当你把浮点计算的弧度结果(比如np.pi/180 * A[:,2]是float类型)赋值回整数类型的数组列时,NumPy会自动截断所有小数部分,只保留整数位——这就是为什么结果全是0。哪怕你后来尝试改类型,如果操作不对(比如只是简单修改dtype标记而没有真正转换数据),也依然会得到0.的结果。
验证方法
先确认下你的数组类型,跑这行代码:
print(A.dtype)
如果输出是int64或者类似的整数类型,那完全符合我们的判断。
解决方案
这里给你三种靠谱的解决办法:
方法一:创建浮点类型的数组副本再赋值
先把原数组转换成浮点类型的副本,再进行弧度转换,这样就不会有截断问题了:
import numpy as np # 原整数数组 A = np.array([[ 1, 2, 25], [ 3, 4, 23], [ 2, 6, 55], [ 9, 7, 78], [11, 5, 47]]) # 创建浮点类型的副本 A_rad = A.astype(np.float64) # 转换最后一列为弧度(两种方式任选其一) A_rad[:, 2] = np.radians(A[:, 2]) # A_rad[:, 2] = np.pi / 180 * A[:, 2] # 保留四位小数输出(方便查看) print(np.round(A_rad, 4))
输出结果就是你想要的:
[[ 1. 2. 0.4363] [ 3. 4. 0.4014] [ 2. 6. 0.9599] [ 9. 7. 1.3614] [11. 5. 0.8203]]
方法二:一开始就创建浮点类型数组
如果从一开始就知道要做浮点运算,直接在创建数组时指定dtype:
import numpy as np # 直接创建浮点类型数组 A = np.array([[ 1, 2, 25], [ 3, 4, 23], [ 2, 6, 55], [ 9, 7, 78], [11, 5, 47]], dtype=np.float64) # 直接转换最后一列 A[:, 2] = np.radians(A[:, 2]) # 设置打印精度,自动保留四位小数 np.set_printoptions(precision=4) print(A)
方法三:全局设置打印精度(可选)
如果你不想每次都用np.round(),可以设置NumPy的全局打印选项,让输出自动保留指定小数位数:
np.set_printoptions(precision=4) print(A_rad)
注意事项
- 绝对不要直接在整数类型数组上赋值浮点结果,一定会被截断小数部分。
astype()方法会返回一个新数组(整数转浮点必须重新分配内存),所以一定要把结果赋值给变量,不要直接丢弃。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

