黒木玄 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 を見て下さい。
2020年08月18日(火)
非公開
タグ:
posted at xx:xx:xx
@genkuroki 返信ありがとうございます。ご指摘の通り関数にはしていませんでした。画像が最初に書いたプログラムなのですが、ループの部分を関数化すると時間が半分(~4s)程度になりました。関数化もそうですが行列を何度も再定義して(line:14,29)パフォーマンスを落としている気がします。 pic.twitter.com/VSg6EzGZVs
タグ:
posted at 00:54:08
@genkuroki プロファイラを見てみたらbound関数が非効率だったので一部実装をお借りして書きなおしたところ120msまで縮まりました。ここまで来るとあとは細かな実装や環境の違いになるかおと思います。ありがとうございました! pic.twitter.com/FwU4iRcXal
タグ:
posted at 01:24:43
@mushicore #Julia言語 私のパソコンはそんなに速くないはずなので不思議に思って調べてみました。
結論:bitrand(n,n)で作ったBitArray{2}を更新させると遅くなる. 通常のArrayの更新の方が速いです。
あと、一ヶ所 @. をつけないと(もしくは = を .= にしないと)、意図した通りの動作になりません。続く
タグ: Julia言語
posted at 07:56:00
@mushicore #Julia言語 続き。配列 v について u = v として、u[1,1] = 1000 とすると、v[1,1] も 1000 に変わります。u = copy(v) とすれば大丈夫なのですが、コピーの分だけ新たなメモリ割当が発生します。続く
タグ: Julia言語
posted at 07:58:12
@mushicore #Julia言語 すでに u も同型の配列として存在しているならば、成分ごとの値のコピーを意味する u .= v を使えば、新たなメモリ割当を防げます。
しかし、= と .= の見た目的な違いはわずかなので、これが原因がバグがよく発生し、私は不安なので
@. u = v
とすることがあります。続く
タグ: Julia言語
posted at 08:00:02
@mushicore #Julia言語 結果とソースコード
bitrand(n, n) を rand(Int8[0,1], n, n) に変えるだけで3倍近く速くなります。さらに @ inbounds も付けると少しだけ速くなる。
プロットまで行かないとバグの発見が結構難しい。プロットを気軽にできる環境でプログラムを書きたいです。
nbviewer.jupyter.org/gist/genkuroki... pic.twitter.com/l821mGdaZB
タグ: Julia言語
posted at 08:04:06
#数楽 剰余項付きのTaylorの定理は「沢山微分して沢山不定積分すればもとの函数に戻る」だけの話に過ぎないことの解説については以下のリンク先を見て下さい。
不定積分における積分定数の不定積分の繰り返しによって
(x-a)^k/k!
型の項が出て来る仕組みになっています。
twitter.com/genkuroki/stat...
タグ: 数楽
posted at 08:15:33
#数楽 Taylorの定理の解説の詰め合わせセット
「沢山微分して沢山不定積分すればもとの函数に戻る」という計算をすれば自然にテイラーの定理が得られる。
genkuroki.github.io/documents/Calc...
より pic.twitter.com/iIp0HPI0zK
タグ: 数楽
posted at 09:08:34
#Julia言語
a = [1, 2]
b = a
b[1] = 10
とするとa[1]も10になる!
a = [1, 2]
b = copy(a)
b[1] = 10
ならa[1]は1のまま。ただしcopy(a)でメモリ割当が発生。
a = [1, 2]
b = similar(a)
@. b = a # 成分ごとの値のコピー
b[1] = 10
でもa[1]は1のまま。
ループの内側でcopyは損。 twitter.com/genkuroki/stat... pic.twitter.com/W4wKiKvNyZ
タグ: Julia言語
posted at 10:18:40
#Julia言語 熱方程式の数値解を求めている。
f!のようにin-place計算すると、無駄なメモリ割当が発生せずに速い。
gのようにループの内側でcopyを使うと遅くなる。この場合にはあんまり遅くなっていないが、ガベージコレクションが頻発すると悲惨なことになる。
twitter.com/genkuroki/stat... pic.twitter.com/0I0eBaew5V
タグ: Julia言語
posted at 10:28:32
#Julia言語
気軽にプロットできることはかなり重要。
バグの有無の確認にために必ずプロットまでやったほうがよいという経験則がある。
気軽にプロットできない環境でのプリグラミングはひどくストレスがたまる。 twitter.com/genkuroki/stat...
タグ: Julia言語
posted at 10:38:52
#Julia言語 MITの講義の宿題の答えには、Juliaが完全なマクロを使えてプロットも用意で数式処理系の支援も受けられることを使って、Fortranで書かれた特殊函数の実装の5〜6倍の速さを実現する実演がある!
nbviewer.jupyter.org/github/steveng...
この意味でJuliaはFortranより速い場合がある。
タグ: Julia言語
posted at 10:45:49
@genkuroki 追加の情報ありがとうございます。黒木さんのコードを参考にしてこちらでもちゃんと動作するgifを作成することができました。Int8, @ inbounds 込みで実行時間が約39msになりました(8年ほど前のi7-3770Kです)。 pic.twitter.com/TOKe6gfR4u
タグ:
posted at 10:55:47
この結果なんだけど、ループ内での配列の読み出しのときに3x3の小さな配列を作っていたのがパフォーマンスに大きく影響していたのでそれぞれの言語でやりなおした。結果はこちら。
Matlab 0.53秒
Python 3.67秒
Julia 0.039秒
タグ:
posted at 10:59:49
@genkuroki 昨日の結果ですが、各言語で同じ理由でパフォーマンスの低下が起こっていたのでそれぞれやり直しました。配列を読むときは愚直に読んだ方が速いと学びました。 twitter.com/mushicore/stat...
タグ:
posted at 11:04:00
#Julia言語 Julia script を shell script のように使う話。
JuliaはFortranを使っていた仕事にも、shell scriptでやっていた仕事にも両方使える。これは結構ゆかい。
twitter.com/genkuroki/stat...
タグ: Julia言語
posted at 11:08:06
#Julia言語
Juliaでの「クラス」の類似物はstructではないです。
structには名前空間の分離機能がないので、名前空間の分離を行うmoduleも考慮しないと、「クラス」でやって来たことをJuliaでやることができなくなる。
structとmoduleの組み合わせは素朴で分かり易い。
twitter.com/polymerase_96/...
タグ: Julia言語
posted at 11:15:01
非公開
タグ:
posted at xx:xx:xx
非公開
タグ:
posted at xx:xx:xx
ごまふあざらし(GomahuAzaras @MathSorcerer
すいません倍は嘘でした.ベンチ取るときに Numba の 初回 JIT を含むので数回回したら Numba/Julia = 1.4 ぐらいまできました.
タグ:
posted at 11:18:48
@genkuroki ありがとうございます!
実は昨日調べててmoduleで分けるのかなとは思ったのですが、インスタンス内部の変数をメンバ関数から更新させていくみたいな操作ってどうやるのが自然でしょうか?
タグ:
posted at 11:28:26
#Julia言語 #Python
Numbaの @ jit 一発で非常に速くなる場合があるのはうれしいですよね。
仕組み的にJuliaの代わりにはならないのですが、Pythonでちょっとした数学的パズルを解きたい人にとって、Numba @ jit は非常に便利な道具だと思います。 twitter.com/MathSorcerer/s...
posted at 11:30:17
julialangのタグ見てると,英語以外で流れてくるの日本語だけでJulia言語のタグもあるのになぜjulialangに日本語を流してしまうのかという気持ちになる
タグ:
posted at 11:45:37
#Julia言語 特に
time julia foo.jl
はアウト。
個人的には初心者にはJupyterがおすすめ。
自動的にusing Plotsした状態が維持される。
JupyterでJuliaを使う方法の私による解説が
nbviewer.jupyter.org/github/genkuro...
にある。
> julia 〇〇.jl してはいけないよ qiita.com/abcsupergt/ite... #Qiita
posted at 11:47:31
julia *.jl しない話、開発中ならもちろんそうであるけれど、例えばでっかいシミュレーションとか機械学習とか走らせる分には初期化のオーバーヘッドなんて無視できるはずなので普通に起動しちゃっていです
タグ:
posted at 12:01:28
ARMには半精度で各種演算を行う命令があるが、ARMv8.2-A以降でしかもoptionalなのでうちのラズパイでは動かない。x86系にはAVX512でBF16の演算命令が導入されるっぽいけど半精度に対してはそういうのはない。GPUなら半精度の各種演算を持ってるかも。
タグ:
posted at 12:37:20
大堀龍一 (Ryuichi OHORI) @__DaLong
> julia 〇〇.jl してはいけないよ
qiita.com/abcsupergt/ite... #Qiita
コンパイル遅いイメージで敬遠していたが VS Code 使うといい感じにやってくれるのね。Jupyter どうしてもぐちゃぐちゃになってしまう、ほんとわかる。
タグ: Qiita
posted at 12:37:42
#Julia言語
添付画像の例を見れば
f(a::Foo, x)
は
a.f(x) のようなもの
とみなせることがわかると思います。
fと同じ函数名の
f(a::Bar, x)
を定義しておくと、f(a,x)はaがFooかBarかで実行される内容が変わります。
gist.github.com/genkuroki/9611...
twitter.com/polymerase_96/... pic.twitter.com/kyMtts7Uyu
タグ: Julia言語
posted at 12:51:42
ごまふあざらし(GomahuAzaras @MathSorcerer
XLA (Accelerated Linear Algebra) is a domain-specific compiler for linear algebra that can accelerate TensorFlow models with potentially no source code changes.
タグ:
posted at 12:57:02
#Julia言語 については、ごまふあざらしさんの解説が全般的に分かり易いです。
ごまふあざらしさんについては
github.com/Julia-Embedded...
も参照。
twitter.com/MathSorcerer/s...
タグ: Julia言語
posted at 13:15:15
@genkuroki なるほど、メンバ関数の本来の形ですね
動的型付け言語でオーバーロードできるのは便利だとは思いました!
aを更新する場合、a.f(x)のほうが演算子f(x)をaに作用させてる感があって気に入ってたんですが、こればかりは仕方ないですね笑
タグ:
posted at 13:24:56
#Julia言語 MITでのJuliaを使った講義の記録は
github.com/mitmath
に沢山あります。とても全部には目を通せない。
これを読めば、数学とJuliaとJupyter notebookの使い方がわかる。
タグ: Julia言語
posted at 13:26:34
#Julia言語 ごまふあざらしさんによるPkgTemplate.jlの使い方の解説
qiita.com/SatoshiTerasak...
qiita.com/SatoshiTerasak...
コードの大部分をパッケージに追い出して、長時間走らせたいコードをそのパッケージを読み込んで動くmain.jlに書いておいて
julia main.jl
とすればスマートだと思う。
タグ: Julia言語
posted at 13:31:57
非公開
タグ:
posted at xx:xx:xx
@polymerase_96 #Julia言語 の典型的な応用先では、
「A型問題aをM型の解法で解く」タイプの函数 solve(a::A, ::M)
がよく定義されています。
直観的には、solveはAの所属物でもないし、Mの所属物でもないとしたいので、こういう場合にはJuliaのmultiple dispatchが便利です。続く
タグ: Julia言語
posted at 13:38:27
@polymerase_96 #Julia言語 一方、確率分布のパッケージDistributions.jlでは、
pdf(dist::Normal, x)
rand(dist::Normal)
などの函数群が定義されていて(distは確率分布、Normalは正規分布の型)、この場合には、
dist.pdf(x)
dist.rand()
の方が分かり易い。記号法には場合ごとの一長一短がある感じ。
タグ: Julia言語
posted at 13:42:25
非公開
タグ:
posted at xx:xx:xx
@polymerase_96 #Julia言語 実はJuliaにも obj.f(x) のスタイルを可能にする機能があるときに追加されていて、PythonのmatplotlibをJuliaで利用するためのパッケージを
using PyPlot
と読み込むと、
plt.figure(~)
plt.plot(~)
の形式で、Python上とほぼ同じスタイルでmatplotlibを使えます。いろいろ便利。
タグ: Julia言語
posted at 13:45:45
非公開
タグ:
posted at xx:xx:xx
非公開
タグ:
posted at xx:xx:xx
#Julia言語 によるKdVの数値解のアニメーション。
ソースコード↓
nbviewer.jupyter.org/github/genkuro...
FFT関連↓
nbviewer.jupyter.org/gist/genkuroki...
FFTで微分を近似計算する方法 twitter.com/yano4o4/status... pic.twitter.com/IAIBfobhzG
タグ: Julia言語
posted at 13:54:58
非公開
タグ:
posted at xx:xx:xx
更に追記です。Pythonの項目ループする回数を間違えていたので3.67秒ではなく28秒くらいだったのですが、Numbaを使うと(@ njitと書くだけ)0.44秒程度になりました。
なので、今のところ以下のような感じです。
100x100 ライフゲーム 1000ステップ
Matlab 0.53秒
Python (Numba) 0.44秒
Julia 0.039秒
タグ:
posted at 13:57:50
#Julia言語 以下の条件が満たされている場合にはJupyter notebookが便利だと思います。
① コードが数百行以内に収まる。
② コードそのものよりも計算結果(特にプロット)の方が重要。
③ 数式を使った解説も同時に配布したい。
Jupyter notebook化してGitHub Gistで公開すれば、ブログがいらない。 twitter.com/hayabusa_0613/...
タグ: Julia言語
posted at 14:03:23
非公開
タグ:
posted at xx:xx:xx
非公開
タグ:
posted at xx:xx:xx
もっといい方法があるかはわからないのですが、Gaston.jl で vscodedisplay に向けて出力すればプロットペインを利用できました。#Julia言語 twitter.com/hayabusa_0613/... pic.twitter.com/yp3KYrRUdL
タグ: Julia言語
posted at 15:03:16
非公開
タグ:
posted at xx:xx:xx
非公開
タグ:
posted at xx:xx:xx
@hayabusa_0613 私の方でも状況再現されました。確かにgnuplotのウィンドウは開きますが、何も表示されないJulia Plotがでますね。
解決方法がわからないので申し訳ないのですが、Julia側の拡張機能設定にプロットペインの切替がありますので、これのチェックを外すとプロットペインを出さないことができます。 pic.twitter.com/ueC6eqVqxS
タグ:
posted at 15:59:33
非公開
タグ:
posted at xx:xx:xx
@hayabusa_0613 画像のチェック外してCodeの再起動かけたら、私の環境では、gnuplotのウィンドウのみ表示されました。
消極的な解決方法で恐縮です。。
タグ:
posted at 16:03:50
#Julia言語 #Python #Numba
Numbaを使って、28秒が0.44秒に!
数文字追加するだけで60倍以上速くなるのは便利!
人口の多いPythonユーザー達が、Numbaでさくっと高速計算して、数学プロットや数学動画を作って公開するようになると、社会的にインパクトがあると思う。
twitter.com/mushicore/stat...
posted at 16:03:54
非公開
タグ:
posted at xx:xx:xx
非公開
タグ:
posted at xx:xx:xx
@hayabusa_0613 Julia Plots (8/8) のことなら、プロットペインをアクティブにした状態で、矢印アイコンで前のプロットを見れて便利なのです。リセットしたいなら、右の […] アイコンから Delete All Plots できます。
タグ:
posted at 16:30:35
非公開
タグ:
posted at xx:xx:xx
#Julia言語 CやC++の方が速いだろうと思っていても、プログラムの書き方によっては全然そうならないことがあります。以下のリンク先のπのモンテカルロ計算では
g++: 2.6 sec
Python: 126 sec
Numba: 1.5 sec
Julia: 0.34 sec
で g++ が Numba に負けています。
gist.github.com/genkuroki/687e...
タグ: Julia言語
posted at 16:33:04
#Julia言語 #Python
g++: 2.6 sec
Python: 126 sec
Numba: 1.5 sec
Julia: 0.34 sec
Pythonは素朴にforループを回した場合です。NumPyをうまく使って高速化した場合は
NumPy: 2.16 秒
で私による下手くそなg++の使い方には勝っています。
gist.github.com/genkuroki/1886...
posted at 16:44:43
ごまふあざらし(GomahuAzaras @MathSorcerer
jupyter の gist it extension, SSH ログインしている関係から使えないって諦めてたけれど personal access token を GitHub のアカウントで生成してそれを gist it のところにペッと貼り付ければできるっということを調べることができた.解決
タグ:
posted at 17:05:31
非公開
タグ:
posted at xx:xx:xx
こういう時に人間性が出ますわなあ |
緊急検診の安倍首相、一部議員から「人間性を疑う」発言が! 共産副委員長はピシャリ「どんな政治的立場の人であれ、健康問題を揶揄すべきでない」 www.zakzak.co.jp/soc/news/20081... @zakdeskより
タグ:
posted at 17:11:51
#Julia言語 ありがたくパクらせてもらった。
preview有り→ProgressBars.jl
preview無し→ProgressMeter.jl
を使うことにした。片方だけに統一して、表示が崩れないようにすることはできなかった。
nbviewer.jupyter.org/gist/genkuroki... twitter.com/MathSorcerer/s... pic.twitter.com/fMqgeBTctm
タグ: Julia言語
posted at 17:19:00
#Julia言語 非常に細かいことですが、
x::Array{Float64, 1} = rand(1000)
の::Array{Float64, 1}は無用。
右辺のrand(1000)がArray{Float64, 1}型のものを生成することをjuliaは知っているので、xはArray{Float64, 1}型だとjuliaが認識できる変数になります。
twitter.com/hayabusa_0613/...
タグ: Julia言語
posted at 17:29:14
パーセントパーセントいうけど,
結局いくら凹んだんだよ!
という人向け.ざっくりシナリオに基づく所得低下規模の資産とか.海外の経済成長等も載ってるよ.
→【公開記事】GDPマイナス27.8%(?)の規模感について|飯田泰之 @iida_yasuyuki #note note.com/iida_yasuyuki/...
タグ: note
posted at 17:32:13
非公開
タグ:
posted at xx:xx:xx
@hayabusa_0613 そうです、そうです。
juliaがどのように型を認識しているかは、
@ code_warntype f(1.2)
のようにして確認できます。@ の後の空白は除く。
この @ code_warntype はよく使います。
タグ:
posted at 17:40:12
#Julia言語 Holy traitでは
struct 剣士 end
struct 非剣士 end
struct 魔法使い end
struct 非魔法使い end
のような空な型の定義が出て来て、structを「クラス」の類似物だと見ることから、どんどん離れて行きます。
この手の型は純粋にmultiple dispatchのためだけに使われる。 twitter.com/genkuroki/stat...
タグ: Julia言語
posted at 18:03:18
非公開
タグ:
posted at xx:xx:xx
#Julia言語 あるパッケージで型P,Qの問題をアルゴリズムA,Bで解くためのコードが実装されているとき、そのパッケージに型Rの問題やアルゴリズムCを付け加えるための自作パッケージを自分のリポジトリで公開できます。
そういうことを非常にやり易い。
twitter.com/genkuroki/stat...
タグ: Julia言語
posted at 18:26:45
A simple example for calling C libraries in Julia.
#JuliaLang pic.twitter.com/t3KioBmZDV
タグ: JuliaLang
posted at 19:05:27
This is 100% #JuliaLang code. It trains a dense neural network using the #Keras Python library. If you replace the first 3 lines with "import tensorflow as tf; from tensorflow import keras", you can run the exact same code in Python. Talk about excellent interoperability! pic.twitter.com/8g4hJYcRwb
posted at 19:52:38
既製のツールキットを使うと負けた気がするので、オライリーのPythonでディープニューラルネットワークを作る本を買ってきました。暇な時にJuliaで書きます。
少しだけ本職の研究と関係ある
タグ:
posted at 20:22:31
非公開
タグ:
posted at xx:xx:xx
@aureliengeron and if you don't want to replace lines to run on either language...
(Thanks @MoseGiordano)
#myfirstever #polyglot #JuliaLang #Python pic.twitter.com/Ovg14wh27F
タグ: JuliaLang myfirstever polyglot Python
posted at 21:41:36
高三 和晃 / Kazuaki Taka @takasan_san_san
juliaでr=0:0.1:1としたときに、これの初めと終わりが欲しいときって、r.startとかr.endみたいに取得できないの?
タグ:
posted at 21:44:13
高三 和晃 / Kazuaki Taka @takasan_san_san
ちなみにr=0:10の時は、r.startとr.stopで0と10が取得できる。
タグ:
posted at 21:45:46
高三 和晃 / Kazuaki Taka @takasan_san_san
@cometscome_phys ありがとうございます。r[begin]は怒られましたね。 pic.twitter.com/Lt3cqkmxei
タグ:
posted at 21:53:26
高三 和晃 / Kazuaki Taka @takasan_san_san
@KagomeLattice ありがとうございます。無事全部確認できました。”Juliaっぽい”についてどこかで説明されてたりするんでしょうか?興味があります。
タグ:
posted at 21:54:46
高三 和晃 / Kazuaki Taka @takasan_san_san
@cometscome_phys 1.2というレトロな感じでした。すみません...
タグ:
posted at 21:58:53
非公開
タグ:
posted at xx:xx:xx
高三 和晃 / Kazuaki Taka @takasan_san_san
Juliaで var1_var2 みたいなstringを簡単に書きたい時、"$var1_$var2"って書くと、var1_ っていう変数になっちゃうんだけど、これってどうするのがいいんだろう?今は小分けにして*で結合している。
タグ:
posted at 22:14:10
高三 和晃 / Kazuaki Taka @takasan_san_san
永井さんと山田くんがjulia即答マンになってくれている... 申し訳ねぇ...
タグ:
posted at 22:21:21
ごまふあざらし(GomahuAzaras @MathSorcerer
ModelingToolkit.jl
github.com/SciML/Modeling...
タグ:
posted at 22:23:06
ごまふあざらし(GomahuAzaras @MathSorcerer
遊んでみた.
gist.github.com/terasakisatosh...
いい感じに高階の常微分方程式解けるってことかな?
タグ:
posted at 22:23:07
#Julia言語 添付画像もしくは
nbviewer.jupyter.org/gist/genkuroki...
を見れば分かるように、Jupyter notebookでは、画像や動画をBase64でノートに埋め込んで表示させることもできます。そのための函数が showimg です。
これを使わなくても主要なパッケージの多くがインライン表示に対応してくれている。 pic.twitter.com/6TveUfMuDJ
タグ: Julia言語
posted at 22:25:18
#Julia言語 コードと画像や動画を1枚のファイルで配布できる。必要なら数式を含めた説明も入れられます。
例えば、1始まりの配列でFFTを行うJuliaでは色々考えないとFFTをうまく使いこなせません。私が確認したことを書いたのが
nbviewer.jupyter.org/gist/genkuroki...
数式と画像が混じっている。 twitter.com/genkuroki/stat... pic.twitter.com/ihd8u1JxhY
タグ: Julia言語
posted at 22:30:17
ごまふあざらし(GomahuAzaras @MathSorcerer
Julia、みんな1.5または1.6つかっていこうな(1.4以下はメンテされないので)
タグ:
posted at 22:51:19
高三 和晃 / Kazuaki Taka @takasan_san_san
Juliaでopen("XXX", w)みたいにしてファイル作る時に文字数の上限があるっぽいのだが何で決まっているんだろう... なんかerror出る...
タグ:
posted at 23:16:26
#Julia言語
JuliaHubでパッケージをバージョンアップしたので "Tag with a different commit already exists for the version mentioned in (Julia)Project.toml" と言われたが対処の仕方が分からない。以下のリンク先の質問と完全に同じ状態。
discourse.julialang.org/t/error-on-pac...
タグ: Julia言語
posted at 23:16:46