#Julia言語

using Statistics, StatsBase
f(x) = (mean(x), geomean(x), median(x))
[∘(fill(f, n)...)((1, 1, 2, 3, 5)) for n in 30:35]

6-element Vector{~}:

(2.0890579497368598, 2.0890579497368598, 2.0890579497368598)


gist.github.com/genkuroki/e69a…

xkcd.com/2435/
#Julia言語

∘(fill(f, 4)...)((1, 1, 2, 3, 5))



f∘f∘f∘f(1, 1, 2, 3, 5)

と同じで、∘は函数の合成なので、

f(f(f(f(1, 1, 2, 3, 5))))

と同じ意味になる。

函数fのn個の合成は

∘(fill(f, n)...)

と書ける。Juliaを超高級電卓として使うときにはこれを知っているとちょっと便利。
#Julia言語 による解答例のスクショ

もとの問題文の数学的内容がほとんどそのままJuliaのコードに翻訳されていることがわかる。

難しいのはn個の函数fの合成が ∘(fill(f, n)...) と書けること。

φ(fill(f, 3)...)はφ(f, f, f) と同じ意味に、∘(f, g, h)(x,y)はf(g(h(x,y)))と同じ意味になる。
#Julia言語 fの定義は

f(x) = (mean(x), geomean(x), median(x)) # Tuple

ではなく

f(x) = [mean(x), geomean(x), median(x)] # Array

でもよいが、一般に、Arrayではなく、Tupleで計算可能ならば、Tupleを使った方が計算が速くなる。

Tupleを配列のように扱うためのパッケージがStaticArrays.jl
#Julia言語 巨大な行列やベクトルの数値線形代数はBLASに任せることが基本になるのですが、常微分方程式などでよく現われる小さなサイズのベクトルや行列の取り扱いについては、StaticArrays.jlの使用を検討すると良いです。これはNTupleを抽象配列化するパッケージ。

github.com/JuliaArrays/St…
#Julia言語 タプルで計算できれば速いと知れば、

(1, 2, 3) + (4, 5, 6)

(5, 7, 9)

のような計算もして欲しくなるのですが、タプルには足し算などが定義されていません。

StaticArrays.jlではSArray型でタプルを包んで、線形代数の演算をできるようにしています。

github.com/JuliaArrays/St…

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with 黒木玄 Gen Kuroki

黒木玄 Gen Kuroki Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @genkuroki

16 Mar
#Julia言語 Julia言語で10行

nbviewer.jupyter.org/gist/genkuroki…

(1/5) 二項分布モデル内の標本分布で測った95%信頼区間にモデルのパラメーター値が含まれる確率のプロット。95%以上になる。ほとんどのパラメーターで95%より真に大きい。 Image
#Julia言語

nbviewer.jupyter.org/gist/genkuroki…

(2/5) 二項分布モデルの95%信頼区間 [CI_min, CI_max] を平面上の座標 (CI_min, CI_max) にプロット。丸の大きさはモデル内でその信頼区間が生じる確率の大きさに比例。赤の十字の左上側の領域ではパラメータの真の値が信頼区間に含まれている。 Image
#Julia言語

nbviewer.jupyter.org/gist/genkuroki…

(3/5) 3次元のランダムウォーク Image
Read 50 tweets
16 Mar
NASAでは普通に #Julia言語 を使っているようですが、日本ではどうなっているんですかね?

Juliaの良い点をNASAがどのように活かしているか分かる動画


Modeling Spacecraft Separation Dynamics in Julia
Jonathan Diegelman
#Julia言語 あらためてNASA JuliaLangでググったら、こんな素敵な動画も見つかりました。


The Julia Language 1.0 Ephemeris and Physical Constants Reader for Solar System Bodies

github.com/JuliaAstro/JPL…
#Julia言語 NASA関連

Pluto.jl
DifferentialEquations.jl
Optim.jl
GlobalSensitivity.jl
MonteCarloMeaurements.jl
ComponentArrays.jl
Unitful.jl

などを使っているみたい。
Read 15 tweets
15 Mar
#数楽 ランダムウォークの話なので、ランダムウォークの数え上げの図をシンプルに描けば簡単です。

(1)は二項係数の問題。

(2)はCを通らない経路を数えて二項係数から引けばよい。

続く Image
#数楽 「Cにいる状態から出発して云々」という発想で最後までやり切るのは苦しいです。

Cを通る経路の個数を数え上げた青の数字をじっと眺めれば色々複雑なことになっていることが分かります。

添付画像の緑の部分はCを経由してAに達する経路の本数(全部で8本になる)の正しい数え方の例。

続く Image
#数楽 移動禁止点があるランダムウォークの経路の数え方に習熟すれば、公平なギャンブルを繰り返すと、勝ちまたは負けに偏っている時間の割合が長くなる確率が高くなることを意味する逆正弦法則を証明できます。以下のリンク先を参照。

この話題は「大学入試問題」という枠で見ない方がお得です。
Read 5 tweets
14 Mar

NASAでどのようにJuliaを使っているか
宇宙船の分離のJuliaによるシミュレーション

多分 #Julia言語 ユーザーはNASAでどのようなパッケージを使っているのか気になると思います。動画のスクショを見て下さい。 ImageImageImageImage
#Julia言語 NASAでの宇宙船の分離シミュレーションで使っているパッケージ続き

添付が画像③によればMATLABでやっていた場合よりも15000倍高速化されたらしい。

DifferentialEquations.jl で微分方程式を解いて、Optim.jl で最適化を実行しているらしい。

Pluto.jlを使っていることもわかる。 ImageImageImage
#Julia言語 NASA では Pluto.jl 上で宇宙船の分離のシミュレーションを行っているらしいのですが、スライダーを設置したり、MonteCarloMeasurements.jl で摂動をかけた場合の結果の違いをシミュレーションのコードを変更せずに表示させているようです。 Image
Read 27 tweets
13 Mar
#Julia言語

JupyterとPluto.jlの違い

Jupyterを使うにはPythonが必要。
Pluto.jlはJuliaだけで動く。

Jupyterではセル単位で実行される。
Pluto.jlでは任意のセルの実行が他のセルにも自動的に反映される。さらにスライダーなどの設置がJupyterよりも楽。

github.com/fonsp/Pluto.jl
#Julia言語 続き

Jupyter notebookをダウンロードすると計算結果の情報もそこに含まれている。
Pluto.jlのノートブックをダウンロードしても計算結果の情報は含まれない。

以上のようにJupyterとPluto.jlでは長所と欠点が違うので使い分けるとよいと思います。

github.com/fonsp/Pluto.jl
#Julia言語 仮に私が中高生に初めてJuliaを使わせる仕事が割り振られたとしたら、

①Juliaの公式バイナリをダウンロードしてインストール
②Plots.jlやPluto.jlなどのパッケージのインストール
③using Pluto; Pluto. run() → ブラウザでPlutoが使用可能に!

のようにしたいです。
Read 13 tweets
12 Mar
#Julia言語 で @ distributed を使ってモンテカルロシミュレーションの足し上げを行うときに、forループの内側で rand() を使うと遅くなります。固定された rng について rand(rng) の形式で実行する必要がある。

解決策:@ my_distributed マクロを自作して使う!

gist.github.com/genkuroki/a6dc…
#Julia言語 例の e のモンテカルロ計算については

gist.github.com/genkuroki/5212…

を参照。色々試してみたが、私の環境では @ my_distributed 版がシンプルでかつ一番速かったです。
#Julia言語

@ my_threads - threads version of @ my_distributed

gist.github.com/genkuroki/1efd…
Read 12 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!