Julia 如何以特定格式保存数组或矩阵?
我曾尝试使用Julia,我对保存数据时固定浮点和小数点的长度有一些疑问 输入文件的名称为“L100\U A100\U C100.dat”,其数据如下:Julia 如何以特定格式保存数组或矩阵?,julia,number-formatting,Julia,Number Formatting,我曾尝试使用Julia,我对保存数据时固定浮点和小数点的长度有一些疑问 输入文件的名称为“L100\U A100\U C100.dat”,其数据如下: SIMULATION RESULTS 0.599566E+00 0.666925E-06 0.3348E+02 0.2527E+03 -0.6948E+04 0.599633E+00 0.666924E-06 0.3394E+02 0.2529E+03 -0.6949E+04 0.599699E+00 0.666
SIMULATION RESULTS
0.599566E+00 0.666925E-06 0.3348E+02 0.2527E+03 -0.6948E+04
0.599633E+00 0.666924E-06 0.3394E+02 0.2529E+03 -0.6949E+04
0.599699E+00 0.666922E-06 0.3424E+02 0.2528E+03 -0.6949E+04
0.599766E+00 0.666920E-06 0.3440E+02 0.2527E+03 -0.6949E+04
0.599833E+00 0.666919E-06 0.3460E+02 0.2525E+03 -0.6948E+04
0.599899E+00 0.666919E-06 0.3488E+02 0.2522E+03 -0.6948E+04
0.599966E+00 0.666919E-06 0.3530E+02 0.2520E+03 -0.6948E+04
file = open("L100_A100_C100.dat", "r")
data = readdlm(file, Float64, skipstart=1)
writedlm("output.txt", data)
所以我编程如下:
SIMULATION RESULTS
0.599566E+00 0.666925E-06 0.3348E+02 0.2527E+03 -0.6948E+04
0.599633E+00 0.666924E-06 0.3394E+02 0.2529E+03 -0.6949E+04
0.599699E+00 0.666922E-06 0.3424E+02 0.2528E+03 -0.6949E+04
0.599766E+00 0.666920E-06 0.3440E+02 0.2527E+03 -0.6949E+04
0.599833E+00 0.666919E-06 0.3460E+02 0.2525E+03 -0.6948E+04
0.599899E+00 0.666919E-06 0.3488E+02 0.2522E+03 -0.6948E+04
0.599966E+00 0.666919E-06 0.3530E+02 0.2520E+03 -0.6948E+04
file = open("L100_A100_C100.dat", "r")
data = readdlm(file, Float64, skipstart=1)
writedlm("output.txt", data)
输出是
0.599566 6.66925e-7 33.48 252.7 -6948.0
0.599633 6.66924e-7 33.94 252.9 -6949.0
0.599699 6.66922e-7 34.24 252.8 -6949.0
0.599766 6.6692e-7 34.4 252.7 -6949.0
0.599833 6.66919e-7 34.6 252.5 -6948.0
0.599899 6.66919e-7 34.88 252.2 -6948.0
0.599966 6.66919e-7 35.3 252.0 -6948.0
但我的问题是如何固定浮点和小数点的长度(就像Python中的
'%10.3f'
)在Julia中printf作为宏
提供,因此可以在运行时而不是编译时处理格式
因此,您可以:
julia> x = rand(2,3)
2×3 Matrix{Float64}:
0.475864 0.285398 0.969636
0.46037 0.708167 0.45792
julia> using Printf
julia> m = (a->(@sprintf "%10.3f" a)).(x)
2×3 Matrix{String}:
" 0.476" " 0.285" " 0.970"
" 0.460" " 0.708" " 0.458"
现在,您有了一个直接转储到文件的预格式化文本矩阵(我使用stdout
):
非常感谢你。但是,考虑到速度和格式,保存矩阵的最佳方法是什么?最好的方法是使用writedlm
的方式,而不是使用任何特殊的格式。您可以使用@printf
向用户显示数据,而不是存储数据。