无法获取权重的原始十进制数值,数值被自动近似处理?
无法获取权重的原始十进制数值,数值被自动近似处理?
看起来你遇到的问题是训练完感知机后,想查看完整的权重和偏置十进制数值,结果被自动转成科学计数法,用repr也没得到预期效果对吧?我来帮你梳理下问题根源和解决办法~
首先,你代码里的一个小疏漏
你最后两行写了repr((weights))和repr((bias)),但只是生成了对应字符串,没有用print()输出!这就是你看不到这个结果的直接原因,得改成print(repr(weights))才能显示出来。不过即使这样,numpy数组的默认打印规则还是可能用科学计数法,所以还要调整打印格式。
解决打印格式的几个办法
1. 用numpy的打印选项强制关闭科学计数法
numpy默认会对很小或很大的数用科学计数法,你可以通过np.set_printoptions()来修改这个规则,让它显示完整的十进制小数:
# 在打印权重/偏置之前设置 np.set_printoptions(suppress=True, precision=15, threshold=np.inf) # suppress=True:关闭科学计数法,尽量用普通小数显示 # precision=15:设置显示的小数位数(根据你的需求调整,比如20位) # threshold=np.inf:确保长数组完整打印,不会出现省略号 # 然后直接打印 print("完整权重:") print(weights) print("完整偏置:") print(bias)
2. 用字符串格式化逐个打印权重
如果你想更精细地控制每个数值的显示格式,比如固定显示15位小数,可以用Python的字符串格式化:
print("逐个打印权重(15位小数):") for idx, w in enumerate(weights): print(f"权重{idx+1}: {w:.15f}") print(f"偏置(15位小数): {bias:.15f}")
这种方式完全不会用科学计数法,每个数值都会以你指定的小数位数显示。
3. 转成Python原生列表打印
把numpy数组转成Python的普通列表,也能避免numpy的科学计数法默认规则:
print("转成列表的权重:") print(list(weights))
不过如果数组很长,列表的打印可能会自动换行,但数值格式是正常的十进制。
最后再确认下
你训练感知机的逻辑看起来没问题,只要调整好打印格式,就能看到你需要的完整小数位数值,方便你复制到PyScript里使用啦~
备注:内容来源于stack exchange,提问作者Jacob James Delso
相关产品推荐
相关产品推荐

