如何以特定格式在 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 语言中绘制圆形扇区?

Julia:如何根据具有特定值的类型字段访问类型数组中的元素

在Julia 1.0.0中本地保存大型数字输出到文件

在julia脚本/ print()中使用shell Array输出格式化的多维数组

如何在 KDB 中以二进制格式保存列表/矩阵?

opengl 矩阵问题