Numpy 打印浮动 <1,不带前导 0

Numpy print floats <1 without the leading 0

提问人:waldol1 提问时间:5/11/2023 最后编辑:waldol1 更新时间:5/14/2023 访问量:68

问:

我需要在区间内显示和检查浮点数的大型 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 来保存每列一个字符,从而在屏幕上查看更大的垫子。例如 -> .我该怎么做?<=100.87.87

我不在乎 .它可以保持不变(并与其他数字未对齐),也可以显示为 .与 类似。它可以留下来,也可以是.我也不在乎如果矩阵恰好包含 之外的值,则解决方案会做什么。1..10.0.0[0,1]

我已经看过numpy.set_printoptionsnumpy.format_float_positional,但他们做不到。谷歌搜索“numpy skip leading 0 for floats”只会为单个浮点数、非 numpy 上下文提供很多解决方案(例如printf("%0.2f", val)[1:])

python numpy 浮点

评论


答:

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" "00.00

评论

1赞 fdireito 5/11/2023
OP 说“由于所有浮点值都是 <1”。
1赞 fdireito 5/11/2023
嗯,你是对的。我会编辑。