我正在尝试显示一个 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]]