如何格式化 numpy 数组以在没有过多 0 的情况下显示而不会丢失其对齐方式?



我正在尝试显示一个 numpy 数组,该数组以紧凑的方式表示具有大数字的矩阵,而不会丢失列和行的对齐方式。

我的代码如下:

EA = 1.8e8
EI = 1.8e7
L = 3
K = np.matrix([
[EA/L, 0, 0, -EA/L, 0, 0],
[0, 12*EI/(L**3), 6*EI/(L**2), 0, -12*EI/(L**3), 6*EI/(L**2)],
[0, 6*EI/(L**2), 4*EI/L, 0, -6*EI/(L**2), 2*EI/L],
[-EA/L, 0, 0, EA/L, 0, 0],
[0, -12*EI/(L**3), -6*EI/(L**2), 0, 12*EI/(L**3), -6*EI/(L**2)],
[0, 6*EI/(L**2), 2*EI/L, 0, -6*EI/(L**2), 4*EI/L]
])
print(K)

在不更改任何选项的情况下执行时,它显示如下:

[[ 60000000.         0.         0. -60000000.         0.         0.]
[        0.   8000000.  12000000.         0.  -8000000.  12000000.]
[        0.  12000000.  24000000.         0. -12000000.  12000000.]
[-60000000.         0.         0.  60000000.         0.         0.]
[        0.  -8000000. -12000000.         0.   8000000. -12000000.]
[        0.  12000000.  12000000.         0. -12000000.  24000000.]]

如您所见,它对齐得很好,但 0 不必要地使用了大量空间。

我尝试使用np.set_printoptions但它不会改变任何东西,除非我手动为浮点添加格式化程序,我已经尝试过:

mapper = lambda x: np.format_float_scientific(x,precision=3)
np.set_printoptions(
precision=4, linewidth=150, 
suppress=False, formatter={'float': mapper}
)

但是,输出变得非常不整洁且难以阅读:

[[6.e+07 0.e+00 0.e+00 -6.e+07 0.e+00 0.e+00]
[0.e+00 8.e+06 1.2e+07 0.e+00 -8.e+06 1.2e+07]
[0.e+00 1.2e+07 2.4e+07 0.e+00 -1.2e+07 1.2e+07]
[-6.e+07 0.e+00 0.e+00 6.e+07 0.e+00 0.e+00]
[0.e+00 -8.e+06 -1.2e+07 0.e+00 8.e+06 -1.2e+07]
[0.e+00 1.2e+07 1.2e+07 0.e+00 -1.2e+07 2.4e+07]]

如何显示对齐但使用科学记数法减少空间的矩阵?

这可以帮助您(您可以根据需要对其进行修改(:

np.set_printoptions(formatter={'float':lambda x:format(x,' 6.1E') if x >= 0 else format(x,'6.1E')})

输出:

[[ 6.0E+07  0.0E+00  0.0E+00 -6.0E+07  0.0E+00  0.0E+00]
[ 0.0E+00  8.0E+06  1.2E+07  0.0E+00 -8.0E+06  1.2E+07]
[ 0.0E+00  1.2E+07  2.4E+07  0.0E+00 -1.2E+07  1.2E+07]
[-6.0E+07  0.0E+00  0.0E+00  6.0E+07  0.0E+00  0.0E+00]
[ 0.0E+00 -8.0E+06 -1.2E+07  0.0E+00  8.0E+06 -1.2E+07]
[ 0.0E+00  1.2E+07  1.2E+07  0.0E+00 -1.2E+07  2.4E+07]]

最新更新