黒木玄 Gen Kuroki
- いいね数 389,756/311,170
- フォロー 995 フォロワー 14,556 ツイート 293,980
- 現在地 (^-^)/
- Web https://genkuroki.github.io/documents/
- 自己紹介 私については https://twilog.org/genkuroki と https://genkuroki.github.io と https://github.com/genkuroki と https://github.com/genkuroki/public を見て下さい。
2018年01月05日(金)
#JuliaLang functor-like objectは「パラメーター付き函数」のことだと思っておけば多分問題ない。Julia言語では同じ名前の異なる函数をいくらでも作れるので、同じ名前と同じパラメーターを持つ異なる函数もいくらでも作れる。「同じパラメーター達が様々なものに色々作用する」と考えればよい。
タグ: JuliaLang
posted at 23:50:31
#JuliaLang mcintを直接
mcint(f)=mean(weight .* f.(sample))
と定義すると大域変数を含むせいで遅くなってしまうが、weightとmeanをMCInt型のオブジェクトの中に保護して、
(mcint::MCInt)(f) = mean(mcint.weight .* f.(mcint.sample))
と定義しておけば、遅くならずにすむ。
タグ: JuliaLang
posted at 23:41:01
#JuliaLang
mcint_struct = MCInt(sample, weight) で作られた mcint_struct は同じ名前でモンテカルロ積分の函数として利用できる。函数 f(x) に対して、
mcint_struct(f)
で積分を近似計算できる。そうするための定義が
(mcint::MCInt)(f) = mean(mcint.weight .* f.(mcint.sample))
タグ: JuliaLang
posted at 23:38:08
#JuliaLang 続き。サンプルコード:
mutable struct MCInt
sample::Array{Float64,1}
weight::Array{Float64,1}
end
(mcint::MCInt)(f) = mean(mcint.weight .* f.(mcint.sample))
mcint_struct = MCInt(sample, weight)
plotcomparison(mcint_struct);
タグ: JuliaLang
posted at 23:36:38
#JuliaLang 続き。大域変数の配列sampleとweightをconst宣言で定数にしてしまえば速くなる。しかし、そうするとsampleとweightを変更できなくなる。それも困る。
sampleとweightの変更可能性と計算の高速性を両立させるためには functor-like object と変な呼び名がついているものを使えばよい。続く
タグ: JuliaLang
posted at 23:35:41
#JuliaLang モンテカルロ積分は素朴には大域変数の配列sample, weightを含む函数として
mcint_naive(f) = mean(weight .* f.(sample))
と定義可能です。このようにシンプルに書けるのは dot syntax のおかげ。
しかし、これは大域変数を含む函数なので遅くなる。続く
タグ: JuliaLang
posted at 23:32:50
#JuliaLang
nbviewer.jupyter.org/gist/genkuroki...
大域変数を含む函数は遅くなる
の話の続き。標準正規分布のサンプルによるウェイト付きのモンテカルロ積分で試してみた。標準正規分布のsampleと対応する適当なweightをパラメーターに与えるとモンテカルロ積分を実行できる。続く
タグ: JuliaLang
posted at 23:29:11
julia-vimが
FileType Auto commands for "*" の処理中にエラーが検出されました:
E117: 未知の関数です: LaTeXtoUnicode#Refresh
って警告出るのは僕だけかな?
タグ:
posted at 22:43:47
#JuliaLang 配列に対する dot syntax は計算効率が良いことを忘れても非常に便利なので多用すると幸せになれます。
異なる次元、異なるサイズの配列に dot syntax を適用すると、計算結果は「全部を含む次元とサイズ」の配列になります。
タグ: JuliaLang
posted at 22:10:02
#JuliaLang 上の状況のとき
xs .+ ys' * im
は(i,j)成分が複素数 xs[i] + ys[j]*im の二次元配列になります。このように二項演算子の前に dot を付けることもできる。
xs .* ys
だと同じN次元ベクトル(本当はちょっと違う)の各要素ごとの積で結果もN次元ベクトルになります。
タグ: JuliaLang
posted at 22:07:59
#JuliaLang
xs=ys=linspace(0,1,N) (0から1までの長さNの等差数列)の各々の要素に函数f(x,y)を作用させてN×Nの2次元配列zを作りたければ、
z = f.(xs, ys')
とする。ys'はysの転置で横ベクトル(1×N行列)になり、f.(xs, ys') は(i,j)成分がf(xs[i],ys[j])の2次元配列になります。
タグ: JuliaLang
posted at 22:04:18
非公開
タグ:
posted at xx:xx:xx
Juliaの練習問題として計算した結果を眺めていたら、解釈がよく分からなくなってきた。オールドファッションな話なので、誰かがやってるだろうと思ったけど、ざっと検索した範囲では見つからない。既にやられているとすれば90年代半ばから0年代にかけてと予想。研究テーマになるかなあ
タグ:
posted at 21:22:53
Julia、関数を引数にできるので、functionとして熱浴法とメトロポリス法を定義した後、
モンテカルロ法(熱浴法)
とか
モンテカルロ法(メトロポリス法)
とかで計算できて大変楽しい
タグ:
posted at 21:22:37
#JuliaLang
函数の中の諸々の対象の型の決まり方:
f(x)=1+x
を使ってf(1)を計算させると1+xの1は整数だとみなされ、f(1.0) を計算させると 1+xの1は浮動小数点数だとみなされます。xに何を代入するかで1+xの1がどのようにコンパイルされるかが変わります。
gist.github.com/genkuroki/fcd5...
タグ: JuliaLang
posted at 21:08:25
@ark_B Juliaです。こんな感じでUnicodeを変数や関数名に使えます
nbviewer.jupyter.org/github/cometsc...
タグ:
posted at 20:51:02
#JuliaLang まとめ
* 重い計算のコードは必ず函数の中に書く。
* 大域変数を含む函数を書かない。(const や functor-like object を使う。)
* xの型が確定したらf(x)のコード中の諸々の型が確定するように書く。
* forループは速い。
* dot syntaxを使用する。
* @ view a[:,j] を使用する。
タグ: JuliaLang
posted at 20:46:24
#JuliaLang Julia言語では函数f(x)のコードはxに具体的な数値を入れて計算させようとするときにコンパイルされます。f(x)のxの型が確定しないとf(x)のコードが含む変数や函数達の型も確定しないので効率よくコンパイルできない。xの型を決めても確定しない場合には計算が超遅くなる(←これ要注意!)。
タグ: JuliaLang
posted at 20:42:06
#JuliaLang a=[]としてpush!(a,~)を繰り返すと遅くなることについては
gist.github.com/genkuroki/2a72...
を見て下さい。
* コードを函数の中に入れる→3倍高速化
* a=[]をa=Float64[]に→5倍高速化
* 固定長配列に変更→2倍以上高速化
こんな感じで簡単に2桁速くなります。
タグ: JuliaLang
posted at 20:37:25
#JuliaLang 例えば、
a=[]; for i in 1:N push!(a, f(i)) end
のような書き方をすると、aが型不明の何かの配列になっているせいで遅くなります。f(i)がFloat64型になるなら、a=Float64[] と初期化するとそれだけで数倍速くなります。
あとサイズが決まった配列を使った方が速いです。
タグ: JuliaLang
posted at 20:33:50
#JuliaLang あ、重大なことを忘れていた。
「型不明の書き方をしない」
も優先順位が非常に高いです。
函数 f(x) を書くときに、xに数値を代入したとき(例えばf(10)とかを計算させるとき)、xの型からf(x)の中の変数の型がどのように確定して行くかを推定する必要がある。これが難しい。
タグ: JuliaLang
posted at 20:31:48
#JuliaLang 「函数の中に計算のコードを書く」と「大域変数を含む函数を書かない」は計算速度が気になる計算を実行するときには最優先事項になります。
タグ: JuliaLang
posted at 20:29:43
@genkuroki そっかぁ、その手があったか。なるへそ。分かりやすいし、高校生でも何とかわかるやも。難しいとすれば、、、何やろか。どれも少しずつ難しいか。
タグ:
posted at 20:29:34
#JuliaLang 大域変数を含む函数を避ける方法については
nbviewer.jupyter.org/gist/genkuroki...
大域変数を含む函数は遅くなる
の後半に例があります。
タグ: JuliaLang
posted at 20:26:21
#JuliaLang 実際にはそんなに神経質になる必要はなくて、計算は必ず @ time マクロをつけて実行して、実行時間と使用メモリを常に監視し、実行時間が短くても異様に消費メモリが大きい場合に注意を払えば十分だと思います。そして、計算が遅くなったときには @ code_warntype f(x)を確認する。
タグ: JuliaLang
posted at 20:22:25
#JuliaLang まとめ
* 重い計算のコードは必ず函数の中に書く。
* 大域変数を含む函数を書かない。(const や functor-like object を使う。)
* forループは速い。(マクロをうまく利用できれば見易く短く書けるかも)
* dot syntaxを使用する。
* @ view a[:,j] を使用する。(@ の後の空白は除く)
タグ: JuliaLang
posted at 20:18:35
#JuliaLang 行列aの第j列に函数fを作用させた結果を第j+1に代入する場合には
a[:,j+1] = f(a[:,j])
と書ける。ところが右辺のa[:,j]の分の配列が新たに確保されてしまう。それが嫌なら
a[:,j+1] = f(@ view a[:,j])
のように書く必要があります。@ の後の空白は除く。
docs.julialang.org/en/stable/stdl...
タグ: JuliaLang
posted at 20:17:12
#JuliaLang 2次元配列(行列)aについてa[:,j]はaの第i列の配列(ベクトル)になります。1次元配列bをaの第j列に代入するにはa[:,j]=bとすればよい。左辺でa[:,j]を使うことには問題はない。
注意しなければいけないのは「右辺」でa[:,j]を使う場合。配列が新たに確保される!続く
タグ: JuliaLang
posted at 20:13:36
#JuliaLang あとJulia言語で配列を無用に確保しまくるコードを書くと計算速度も当然遅くなります。その点については以下に注意する。
* 配列の各要素に函数を作用させる場合には dot syntax を使うと効率がよくなる。
docs.julialang.org/en/stable/manu...
続く
タグ: JuliaLang
posted at 20:09:42
#JuliaLang Julia言語での注意点
* 重い計算のコードは必ず函数の中に書く。
* 大域変数を含む函数を書かない。(const や functor-like object を使う。)
* forループは速い。(マクロをうまく利用できれば見易く短く書けるかも)
タグ: JuliaLang
posted at 20:05:55
非公開
タグ:
posted at xx:xx:xx
非公開
タグ:
posted at xx:xx:xx
#JuliaLang
Jupyter notebookでjuliaを julia -p auto で起動するようにしておくと並列処理もできます。以下のリンク先の第1.10節に解説がある。
nbviewer.jupyter.org/gist/genkuroki...
並列処理のマクロを使うと
@ parallel (+) for i in 1:N rand() end
で乱数の和を計算してくれます。@ の後の空白は除く。
タグ: JuliaLang
posted at 19:57:44
#JuliaLang LaTeXでは書くのが面倒な部分をマクロにするのが普通なのですが、Julia言語でも同様の目的にマクロを使用できます。添付画像のような感じ。マクロを定義しておくと
(s=0.0; for i in 1:N s+=rand() end; s)
を
@ sum(0.0, i, 1:N, rand())
と書ける。@ の後の空白は除く。 pic.twitter.com/k5gTEuDwTU
タグ: JuliaLang
posted at 19:54:10
#JuliaLang
gist.github.com/genkuroki/44e6...
Julia言語では和の取り方の選択肢が結構あってどれを使用するか悩む。
sum(rand(N)) ←メモリを大量消費
sum(rand() for i in 1:N) ←メモリは消費しないが遅い
(s=0.0; for i in 1:N s+=rand() end; s) ←速くてメモリも消費しないが書くのが面倒
続く
タグ: JuliaLang
posted at 19:47:15
私も黒木先生の影響で再入門したクチです。Juliaという単語が入ったツイートをひたすら拡散されてましたからね。 twitter.com/adhara_mathphy...
タグ:
posted at 19:45:46
イジング模型のモンテカルロシミュレーションの計算をしてるWebページ色々あるけど、磁場ゼロにしてシミュレーションして磁化の温度依存性を見てるのがある。磁場ゼロなら全スピンフリップのエネルギー差がないので、トータル磁化はゼロになるべきなのだけどなあ
タグ:
posted at 19:35:44
Juliaブームが年始に来たのがよく分かる github.com/bicycle1885/Ju... pic.twitter.com/Ey9rV74zv3
タグ:
posted at 18:41:19
ちなみにスキームはCrank-Nicolson使ってる。NLsolve掛けようと思ったらメモリが足らんと怒られて、そらよく考えたらJacobi行列計算するには足りなさすぎる。仕方がないので自分で反復書いた。dxが粗すぎるけど、10倍にするにはキツい。
タグ:
posted at 18:29:38
julia、確かに使いやすいのだけども動的型になってしまわないようにとかGCの制御とかがしんどいので、スクリプト言語として使うには良さそうだがC++の代替になりはしないだろうなという感じ(C++/Pythonの組み合わせからRust/Juliaの組み合わせへの移行という気持ちで行くとよさそう)
タグ:
posted at 18:28:48
#julialang の習作としてRösslerにLaplacianくっつけたの解いてみた(初期条件として微小ノイズ入れてる)。プロットはRCall使って、慣れてるggplot2。特に考えずに速度出るという触れ込みだったが、(at)timeによるとGCに半分ほど時間使ってるらしくハァ?💢ってなってる(3分ほどかかった)。 pic.twitter.com/DKxQPDazan
タグ: julialang
posted at 18:23:33
非公開
タグ:
posted at xx:xx:xx
3年くらい前なので若干状況が変わってます。今ならloop fusionする構文があるので,ループを展開してもそんなに速くはならないと思います (詳しくは julialang.org/blog/2017/01/m...)。あと,Intel MKL Vector MathematicsとかならJuliaでもベクトル化すると速くなると思います。 twitter.com/ceptree/status...
タグ:
posted at 17:42:55
Juliaではfor文を使え。ベクトル化してはいけない。 - りんごがでている bicycle1885.hatenablog.com/entry/2015/04/...
タグ:
posted at 17:25:35
#超算数 式を立てない方が正答率が高い。
加減の文章問題における立式の妨害効果
www.jstage.jst.go.jp/article/pamjae...
タグ: 超算数
posted at 17:24:05
検証したいなと思っていたことを、@bicycle1885さんが完璧にやってらした
Juliaではfor文を使え。ベクトル化してはいけない。
bicycle1885.hatenablog.com/entry/2015/04/...
タグ:
posted at 17:23:34
特に(広い意味での)力学系的なこと (SDEとかPDEとか含む) やっている人達には Julia お勧めな気がするな。 DifferentialEquations.jl の機能はヤバい (語彙力) docs.juliadiffeq.org/latest/ このトーク見ると概観がつかめるはず→ www.youtube.com/watch?v=75SCMI...
タグ:
posted at 16:46:32
非公開
タグ:
posted at xx:xx:xx
関連してさらに先駆的なのは1985年にPRLに載せた表面臨界緩和の論文で、スケーリングが美しいんですけど、そもそもがニッチすぎるテーマなのか被引用数は極めて少ない
journals.aps.org/prl/abstract/1...
表面臨界現象もやり残した細々したことはたくさんあるんだけどねえ
タグ:
posted at 15:49:32
というわけで、僕が博士課程在学中に書いた3次元イジングモデルの臨界緩和の論文( Kikuchi & Okabe JPSJ vol.59, p.1359)
journals.jps.jp/doi/abs/10.114...
を読み直したんですけど、結構いいじゃん。必要なことは全部書いてあるし、計算も内容も先駆的じゃん。もっと引用してくれよー
タグ:
posted at 15:44:30
#JuliaLang この試みは要注目
“Compiling Julia Binaries”
medium.com/@sdanisch/comp...
タグ: JuliaLang
posted at 14:29:31
This package makes it much easier to precompile #julialang packages for deployment. @SimonDanisch building really cool things always! twitter.com/SimonDanisch/s...
タグ: julialang
posted at 13:43:15
イジングモデルをall upからTcに上げた後のダイナミクスでFirst passage time (初めて磁化が0を切る時刻)の分布を調べた研究をご存知のかたはおられませんか。ざっと調べた範囲では見つからなかったのですが(Tc以下へのクエンチでは宮下さんとかが昔やってる。臨界点が見つからない)
タグ:
posted at 13:41:41
男の子のなりたい職業1位が久しぶりに「学者」だったのが、仮面ライダービルドが原因だったら個人的には非常に面白い事態だと思うが、ビルド放映が9月開始なのに対し、なりたい職業の方の調査期間が7-9月なので、来年の同じ調査の結果を見ないと何とも言えないと思っている。
タグ:
posted at 13:36:00
書名に「ベーシック」という一言を入れると売れるので「ベーシック圏論」になったわけではないだろうけど(原題がBasic Category Theory)その方針で行くなら,「ベーシック数論」という邦訳もありうる.
タグ:
posted at 12:23:35
仮面ライダー部活外部指導者
仮面ライダー介護従事者
仮面ライダーFORTRAN 77、仮面ライダーLISP、仮面ライダーCOBOL
仮面ライダーJuliaは流行に乗りすぎか。
保育園の先生とか幼稚園の先生は…戦隊モノ?保育戦隊スクスクジャーとか? twitter.com/hachiya/status...
タグ:
posted at 11:46:18
池田元教授から起こされている名誉棄損裁判の進捗が一気にアップデートされました。ポイントは、実験を行ったA氏が、実は雇止めになった大学を池田氏と全く同じセットの薬害弁護士を代理人として訴えていた点や、突如、裁判長が交代となり、実... fb.me/1u32fEKK8
タグ:
posted at 08:32:21
@genkuroki 読み直してみた。「見つける」というのはどういう事だろう。一つ箱を開けて「違う」ならもう一つの箱にある事を「見つけた」とはならないのか?ふーむ。謎だ。
タグ:
posted at 06:04:07
#JuliaLang 上に方のリンク先のブログ記事ではループを1億回回しているようだが、少なすぎ。ベンチマークをやるなら10億回にした方がよいと思う。
以前、モンテカルロπで試したときにも、forループを10億回回さないといけない感じだった。
タグ: JuliaLang
posted at 04:10:09
#JuliaLang 正しい型の教え方は大域変数に関する a::Float64 です。
nbviewer.jupyter.org/gist/genkuroki...
しかし、aを定数にしたり、函手的オブジェクトを使った場合よりは遅い。大域変数を含む函数はやはりやめた方がよさそう。
タグ: JuliaLang
posted at 03:55:40
#JuliaLang Float64な大域変数aを含む函数
function f(N)
local s = 0.0
for i in 1:N
s += a*rand()
end
return s/N
end
ではsの型がAnyと判定され、実行速度が遅い。そこで、s::Float64と型を教えてあげると滅茶苦茶**遅く**なります。笑えるくらい遅くなる。
タグ: JuliaLang
posted at 03:53:25
投票ありがとうございました!総投票数104票で「Julia(プログラミング言語)」が26%、「JULIA(AV女優)」が63%、「その他」が11%という結果でした!JULIAさんのデビューが2010年、Juliaのリリースが2012年ということを鑑みれば妥当な結果でしょうかね!また来年この結果がどう変わっているか楽しみです! twitter.com/ceptree/status...
タグ:
posted at 03:40:36
例えば、算数数学教育の授業で、幼児はピアジェの保存課題に失敗するので数量の概念を理解していない、のようなことを教わったら、学生の側はそう教えた先生の言うことを全て疑うようにした方が良い。厳しい突っ込みを入れまくらないと大変なことになるかもしれない。
タグ:
posted at 03:27:09
例えば、統計学の授業で【ベイズ統計の基礎はベイズの定理である】とか【ベイズ統計は事前分布に主観が入るから信頼できない】とか「頻度主義 vs. ベイズ主義」の話を延々としだしたら、学生の側は徹底的な突っ込みを入れるべき。
タグ:
posted at 03:20:32
例えば、物理の統計力学の授業で【ギブスのパラドックスがあるので統計力学から熱力学を再現するためには量子力学が必須】のように教わったりしたら、学生の側は厳しく突っ込みを入れるべき。
タグ:
posted at 03:17:10
大学レベルの話の中には本質的に難しい内容が結構含まれているので、教えている側がわかっていないことは結構普通。
ぶっちゃけ、堂々とデタラメが継続的に教えられている場合もあるので、学生側はきちんと厳しい突っ込みを入れなければいけない。
twitter.com/ceptree/status...
タグ:
posted at 03:12:34
* 函数にしていない直書きのコードで速度計測
(Julia言語では函数にしないと遅い)
* シェルからの time julia foo.jl による速度計測
(gccなどによるコンパイル時間も含めた実行時間計測と本質的に同じ)
の2つは #JuliaLang のベンチマークでは禁忌。
タグ: JuliaLang
posted at 03:01:18
#JuliaLang に限らず色々な言語について勉強になる。
色々な言語で計算速度を比較してみた qiita.com/hanada/items/c...
タグ: JuliaLang
posted at 02:54:35
@genkuroki 2人だと100%助かる♬ 事前の協議も不要か。3人は半分だけ見る事ができるという話が通らないからパス。4人だとどうだろう、、、あかん明日は5時起きやん。寝よう。
タグ:
posted at 02:28:08
This one is convincing
bit.ly/2lUVfsF
#ThursdayThoughts pic.twitter.com/iKpH5NtNbC
タグ: ThursdayThoughts
posted at 02:03:21
#JuliaLang Jupyter notebook にも以上の件(functor-like objectの件)を追加しておいた。
nbviewer.jupyter.org/gist/genkuroki...
gist.github.com/genkuroki/739f...
前者には更新がまだ反映されていないですが、じきに反映されると思います。
タグ: JuliaLang
posted at 01:21:23
#JuliaLang 続き~やるのは行儀が悪いし、バグの原因になる。「aとNからテイラー展開の係数を計算した結果」と「テイラー展開の計算法」(函数)を持つ「オブジェクト」を作る方法が欲しい。
functor-like objectはそのまんまの機能ですね。
これは勉強になった。今後は使わせてもらおう。
タグ: JuliaLang
posted at 01:12:25
#JuliaLang ああ、なるほど、functor-like object は数値計算のコードを書きたい人なら当然思い付く機能だ。
例えば、ある函数の点aを中心とする項数Nのテイラー展開の計算を繰り返し行う場合には、aとNからテイラー展開の係数を全部前持って求めておきたい。しかし、それを大域変数で~続く
タグ: JuliaLang
posted at 01:09:12
#JuliaLang ああ、なるほど、
docs.julialang.org/en/stable/manu...
Function-like objects
を使えば良さそうですね。
struct Hoge
d::Float64
end
function (hoge::Hoge)(N)
local s = 0.0
for i in 1:N
s += hoge.d*rand()
end
return s/N
end
k = Hoge(2*Float64(π))
k(10^8) pic.twitter.com/O2RHOorcGO
タグ: JuliaLang
posted at 01:06:49
@genkuroki 超算数界隈の先生方は、物理のいい加減な定義を書かなければならない掟でもあるんでしょうか。
twitter.com/musicisthebest...
タグ:
posted at 00:37:27
@ceptree 私の手元では環境構築もまだなので試していませんが、2年前に書かれたこのブログ
qiita.com/y_irabu/items/...
では、再帰的関数による計算で Julia より gfortran が5倍近く速かったようです。今では逆転しているのか、気になるところです
タグ:
posted at 00:37:06
@Bimaterial > 何故 Julia がこれほど速いのかを表面的にでも理解したいところてすが、まずは触ってみたいと思います
私もまったく同意見です!一緒に遊びましょう!
タグ:
posted at 00:28:51
There's a new record for the largest known prime. Written in binary, it is a string of 77,232,917 ones.
www.johndcook.com/blog/2018/01/0... pic.twitter.com/VFdqpHa1pl
タグ:
posted at 00:26:31
#JuliaLang 続き。実戦でこれをやる場合には c は配列であることが多く、配列 c の計算にはそれなりに手間がかかる。(cに当たるものの例:Euler変換で使用されるウェイト)
これで十分に速いことを知っているので、実用的にはこれで不満はないのですが、もっといいやり方があるんですかね?
タグ: JuliaLang
posted at 00:14:35
#JuliaLang 続き~以下のようなことをすることが多い:
function make_h()
local c = 2*Float64(π)
function h(N)
local s = 0.0
for i in 1:N
s += c*rand()
end
return s/N
end
return h
end
h = make_h()
h(10^8)
タグ: JuliaLang
posted at 00:12:22
斉藤 淳 『アメリカの大学生が学んでいる @junsaito0529
「財政破綻後の日本経済の姿」に関する研究会:これまでの経過と内容 www.carf.e.u-tokyo.ac.jp/research/zaise...
このサマリーを見ていると、「掛け算に順番がある」という主張に共通する怖さを感じてしまう。
タグ:
posted at 00:11:27
#JuliaLang いつも悩むのが計算が複雑な定数を函数の中で使用したい場合。Julia言語的にはマクロで計算が複雑な数を定数として定義するようにしてしまえばよいのかもしれませんが、マクロについてまだよく理解していないので、
続く
タグ: JuliaLang
posted at 00:11:17
この辺の仕様、Julia開発者から「大域変数なんてもの使うな」「まともなプログラミングスタイルを身に付けろ」という強いメッセージを感じる。 twitter.com/genkuroki/stat...
タグ:
posted at 00:11:05
#JuliaLang
{at}code_warntype f(10^8)
とすると赤字で Any と表示される部分が出て来る。これは悪い兆候。グローバル変数aのせいで、s=0.0としてあるにもかかわらず、sの型をAnyとせざるを得なくなってしまっている。
タグ: JuliaLang
posted at 00:09:38
#JuliaLang
nbviewer.jupyter.org/gist/genkuroki...
大域変数を含む函数は遅くなる
fは大域変数を含み、gは定数を含み、hはローカル変数を含む。
それぞれの実行に要する時間は
f(10^8) → 4.742593 seconds
g(10^8) → 0.230339 seconds
h(10^8) → 0.235304 seconds
メモリの使用量も段違い。
タグ: JuliaLang
posted at 00:08:02