Julia 如何以特定格式保存数组或矩阵?

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

我曾尝试使用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.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
向用户显示数据,而不是存储数据。