#author("2020-01-30T18:40:19+09:00","default:Miyashita","Miyashita")
#author("2020-01-31T00:41:18+09:00","default:Miyashita","Miyashita")
*配列の出力(print) [#l1ddcf3f]
#contents
ある2次元配列 ϕ (Array{T,2} where T<:Float64 とか) を,フォーマット指定して出力することを考える.~

**フォーマットにこだわりがなければ… [#t3e6ab0e]
良い function があることを教えてもらった.~
[[Juialang: print 入門 - Hello World から pretty-print まで - (Qiita)>https://qiita.com/goropikari/items/c5ae799d3ff2e789ee20]]~
Base.print_array で配列の出力ができる.~
幅は自動で揃うようになっている.下記はファイルに出力するときの例.
#codeprettify(lang-julia){{
open("out.txt","w") do file
    Base.print_array(file, ϕ)
end
}}
空白区切りでもよく,浮動小数点数の桁を気にする必要がなければ,これ以下は特に読む必要はない.~
~

** Matrixで出力 [#s38ebcb6]
【2020年1月 若干修正】
 ϕ11,ϕ12,ϕ13 ... ϕ1m
 ϕ21,ϕ22,ϕ23 ... ϕ2m
 ϕ31,ϕ32,ϕ33 ... ϕ3m
 ...
 ϕn1,ϕn2,ϕn3 ... ϕnm
のように(数字は行列の添字を表す),行列の見たままファイルへ print したいときは,
#codeprettify(lang-julia){{
using Printf
open( "matrix_out.csv", "w" ) do fileIO
    [(if j != m
          @printf(fileIO, "%11.3e,", ϕ[i,j]) # 最後の列以外カンマ区切り
          @printf(fileIO, "%11.3e,", ϕ[i,j]) # 最後の列以外.カンマ区切り
      else
          @printf(fileIO, "%11.3e\n", ϕ[i,j]) # 最後の列で改行
      end) for j=1:m, i=1:n]
end
}}
若干面倒な書き方なので,もっとスマートな方法があったら知りたい.~
~

** 3-column の Vector で出力 [#mc05a2c8]
 x11, y11, ϕ11
 x21, y21, ϕ21
 x31, y31, ϕ31
 ...
 x12, y12, ϕ12
 x22, y22, ϕ22
 x32, y32, ϕ32
 ...
 xnm, ynm, ϕnm

のように縦長に変数ごとに3列で出力する場合は下記の通り.
#codeprettify{{
# ファイル展開, 3列 出力例
open( "tmp.txt", "w" ) do fileIO
   [@printf(fileIO, "%8.3f %8.3f %11.3e\n", x[k],y[k],ϕ[k]) for k=1:length(ϕ[:])]
end
}}
@printf の format 指定は,直接文字列""を入力する以外の方法ではエラーになった(String変数ではだめだった). ~
ただし @eval を使うとできることがわかった.[[@printg(@sprintf)のフォーマット>../@printf_variable_format]]に記載.

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes