[英]How can I make Julia output vectors as pretty as Numpy?
如果我執行以下操作:
A = [
2 1 3 0 0;
1 1 2 0 0;
0 6 0 2 1;
6 0 0 1 1;
0 0 -20 3 2
]
b = [10; 8; 0; 0; 0]
println(A\b)
output 是:
[8.000000000000002, 12.0, -6.000000000000001, -23.999999999999975, -24.000000000000043]
但是,我更希望它看起來類似於 Numpy 輸出相同問題結果的方式(編輯:最好保留尾隨零和逗號):
[ 8. 12. -6. -24. -24.]
是否有捷徑可尋? 當然,我可以編寫自己的 function 來執行此操作,但如果我可以設置一些格式化標志,那就太好了。
謝謝!
標准方法是更改IOContext
:
julia> println(IOContext(stdout, :compact=>true), A\b)
[8.0, 12.0, -6.0, -24.0, -24.0]
你可以寫你的 function 例如(我不想在這里完全籠統,而是向你展示這個想法):
printlnc(x) = println(IOContext(stdout, :compact=>true), x)
然后只需在您的代碼中調用prinlnc
。
您可以通過重寫浮點數的Base.show
方法來更改 Julia 中的 REPL 行為。 例如:
Base.show(io::IO, f::Float64) = print(io, rstrip(string(round(f, digits=7)),'0') )
現在你有:
julia> println(A\b)
[8., 12., -6., -24., -24.]
正如@DNF Julia 所指出的那樣,在向量中使用逗號。 如果你想要一個水平向量(實際上是一個 1xn 矩陣)你需要轉置:
julia> (A\b)'
1×5 adjoint(::Vector{Float64}) with eltype Float64:
8. 12. -6. -24. -24.
julia> println((A\b)')
[8. 12. -6. -24. -24.]
Numpy 騙你。 它只是在打印時隱藏數字。 要檢查它是否僅操縱 output 的打印,請執行print(A @ X - b)
並查看結果。
print(A @ X - b)
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 -3.55271368e-15 0.00000000e+00]
另一方面,Julia 預先明確了這一點。 如果你在 Julia 中做同樣的事情,你會得到相同的結果(我使用 Foat64 和 Numpy 一樣):
julia> X = A \ b;
julia> Float64.(A) * X - b
5-element Vector{Float64}:
0.0
0.0
0.0
-3.552713678800501e-15
0.0
但是,您可以使用類似於 arrays 的壓縮打印來刪除不需要的數字。
julia> round.(X, digits=7)
5-element Vector{Float64}:
8.0
12.0
-6.0
-24.0
-24.0
這個,比那個“丑”的8. 12. -6. -24. -24.
8. 12. -6. -24. -24.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.