如何以特定格式在 Julia 中保存数组或矩阵?
Posted
技术标签:
【中文标题】如何以特定格式在 Julia 中保存数组或矩阵?【英文标题】:How to save array or matrix in Julia with specific format? 【发布时间】:2021-05-29 14:20:54 【问题描述】:我尝试使用 Julia,但在保存数据时我有一些关于固定浮点数和小数点长度的问题。
输入文件名为“L100_A100_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)
输出是
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'
)?
【问题讨论】:
【参考方案1】:在 Julia 中,printf
可用作 macro
,因此可以在运行时而不是编译时处理格式。
因此你可以这样做:
julia> x = rand(2,3)
2×3 MatrixFloat64:
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 MatrixString:
" 0.476" " 0.285" " 0.970"
" 0.460" " 0.708" " 0.458"
现在你有一个预先格式化的文本矩阵,你可以直接转储到文件中(我使用 stdout
代替):
julia> writedlm(stdout, m, "" , quotes=false)
0.476 0.285 0.970
0.460 0.708 0.458
【讨论】:
非常感谢。但是考虑到速度和格式,保存矩阵的最佳方法是什么? 最好的方法是使用writedlm
,而不是使用任何特殊格式。您使用@printf
向用户显示数据而不是存储数据。以上是关于如何以特定格式在 Julia 中保存数组或矩阵?的主要内容,如果未能解决你的问题,请参考以下文章
Julia:如何根据具有特定值的类型字段访问类型数组中的元素