簡體   English   中英

如何使 Julia output 向量與 Numpy 一樣漂亮?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM