提问人:waldol1 提问时间:5/11/2023 最后编辑:waldol1 更新时间:5/14/2023 访问量:68
Numpy 打印浮动 <1,不带前导 0
Numpy print floats <1 without the leading 0
问:
我需要在区间内显示和检查浮点数的大型 numpy 矩阵,并试图避免换行,因此每个打印值都应尽可能短。我已经在使用它,它会产生类似的东西[0,1]
np.set_printoptions(precision=2)
[[1. 0.93 0.87 0.9 0.9 1. 0.93 1. 0.9 0.97 0.97 0.97 0.77 0.73 0.73 0.83 0.67 0.87 0.8 0.87 0.9 0.8 0.9 0.97 0.97 0.83 0.57]
[0.93 1. 0.83 0.8 0.83 0.9 0.97 0.9 0.97 0.97 0.97 0.87 0.73 0.67 0.63 0.77 0.6 0.8 0.7 0.9 0.9 0.8 0.83 0.97 0.97 0.73 0.53]
[0.87 0.83 1. 0.7 0.73 0.9 0.8 0.93 0.8 0.83 0.9 0.77 0.67 0.7 0.67 0.67 0.6 0.73 0.63 0.7 0.73 0.77 0.87 0.93 0.83 0.63 0.5 ]
...
]
由于所有浮点值都是 ,我可以通过删除前导 s 来保存每列一个字符,从而在屏幕上查看更大的垫子。例如 -> .我该怎么做?<=1
0
0.87
.87
我不在乎 .它可以保持不变(并与其他数字未对齐),也可以显示为 .与 类似。它可以留下来,也可以是.我也不在乎如果矩阵恰好包含 之外的值,则解决方案会做什么。1.
.
1
0.
0.
0
[0,1]
我已经看过numpy.set_printoptions和numpy.format_float_positional,但他们做不到。谷歌搜索“numpy skip leading 0 for floats”只会为单个浮点数、非 numpy 上下文提供很多解决方案(例如printf("%0.2f", val)[1:]
)
答:
2赞
user21508463
5/11/2023
#1
一种简单的方法是将格式化的输出定向到一个字符串,并将所有出现的 with 和 替换为 。0.
.
1.
1
评论
0赞
waldol1
5/11/2023
您能添加一个如何在numpy中完成此操作的示例吗?真的只是吗?str(mat).replace('0.', '.').replace('1.', '1')
0赞
5/11/2023
@waldol1我不知道是否提供了您想要的格式。这取决于你。str(mat)
4赞
fdireito
5/11/2023
#2
np.set_printoptions(formatter={'float':lambda n: f"{n:.2f}".replace("0.",".")})
注意:对于所问问题的具体情况(例如值 < 1),建议这样做。在这个问题的范围之外,这可能不是一个好的解决方案。
由 OP 编辑:问题已澄清值为 ,因此解决方案需要改为<=1
np.set_printoptions(formatter={'float':lambda n: f"{n:.2f}".replace("0.",".")}).replace(".00", " ")
由于格式化程序将显示为 ,因此需要将其替换为 (2 个空格),因此 col 只有 3 个字符。这也处理,因为以前的解决方案会将其显示为 .{n:.2f}
1.
1.00
" "
0
0.00
评论
1赞
fdireito
5/11/2023
OP 说“由于所有浮点值都是 <1”。
1赞
fdireito
5/11/2023
嗯,你是对的。我会编辑。
评论