Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
あなたの知らない(概ね知らなくても良い)Juliaの世界 for JuliaLangJa 年末...
Search
GOTOH Shunsuke
December 08, 2024
Technology
0
170
あなたの知らない(概ね知らなくても良い)Juliaの世界 for JuliaLangJa 年末 LT 大会 2024
あなたの知らない(概ね知らなくても良い)Juliaの世界
JuliaLangJa 年末 LT 大会 2024 LT発表資料
GOTOH Shunsuke
December 08, 2024
Tweet
Share
More Decks by GOTOH Shunsuke
See All by GOTOH Shunsuke
JuliaでApp(仮) for JuliaTokai #23
antimon2
0
110
関数型まつりレポート for JuliaTokai #22
antimon2
0
230
Julia という言語について (FP in Julia « SIDE: F ») for 関数型まつり2025
antimon2
3
1.3k
FP in Julia « SIDE: J » for JuliaTokai #21
antimon2
1
200
JuliaTokaiとJuliaLangJaの紹介 for NGK2025S
antimon2
1
330
Julia 新 LTS v1.10 解説 for JuliaTokai #20
antimon2
1
360
夏休みの(最後の)宿題 for JuliaTokyo #12
antimon2
1
280
Julia クイズ ~API編~ for JuliaTokai #19
antimon2
1
220
Julia でどうしても super().hoge みたいなことしたい人へ for JuliaTokai #18
antimon2
1
430
Other Decks in Technology
See All in Technology
Oracle Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
2
500
モダンデータスタックの理想と現実の間で~1.3億人Vポイントデータ基盤の現在地とこれから~
taromatsui_cccmkhd
2
290
BidiAgent と Nova 2 Sonic から考える音声 AI について
yama3133
2
130
AI with TiDD
shiraji
1
330
[Data & AI Summit '25 Fall] AIでデータ活用を進化させる!Google Cloudで作るデータ活用の未来
kirimaru
0
4.1k
AIBuildersDay_track_A_iidaxs
iidaxs
4
1.6k
Bedrock AgentCore Evaluationsで学ぶLLM as a judge入門
shichijoyuhi
2
300
The State of AI Agent Security:2025年の総括と2026年の宿題
pict3
0
110
Kiro を用いたペアプロのススメ
taikis
4
2.1k
TED_modeki_共創ラボ_20251203.pdf
iotcomjpadmin
0
170
2025-12-27 Claude CodeでPRレビュー対応を効率化する@機械学習社会実装勉強会第54回
nakamasato
4
1.3k
Cloud WAN MCP Serverから考える新しいネットワーク運用 / 20251228 Masaki Okuda
shift_evolve
PRO
0
130
Featured
See All Featured
Mind Mapping
helmedeiros
PRO
0
42
Practical Orchestrator
shlominoach
190
11k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
140
Applied NLP in the Age of Generative AI
inesmontani
PRO
3
2k
The Limits of Empathy - UXLibs8
cassininazir
1
200
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
860
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
78
Raft: Consensus for Rubyists
vanstee
141
7.3k
First, design no harm
axbom
PRO
1
1.1k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
80
Transcript
あなたの知らない (概ね知らなくても良い) Juliaの世界 2024/12/08 JuliaLangJa 年末 LT 大会 2024 antimon2(後藤
俊介)
お品書き • お前誰よ? • 簡単な Julia の紹介 • JuliaTokai の紹介
• 本編
お前誰よ?
自己紹介 • 名前:後藤 俊介 • 所属:有限会社 来栖川電算 • コミュニティ:🌟JuliaTokai, 🌟機械学習名古屋,
⭐JuliaLangJa, Ruby東海, Python東海, … • 言語:Julia, Python, Ruby, … • SNS等: (@antimon2) • SNS等(2): (@antimon2.jl) • 著書:実践Julia入門
本編
あなたは、こんな書き方知ってますか?
① ~=◯◯
① ~=◯◯ (基本) • Julia の演算子は普通に(再)代 入できる! ◦ 関数を代入すると演算式でシンプ ルにコードを書くことができる
◦ ~ の場合、= との間の空白も省略 できる(~= という複合代入演算子 が存在しないため) ◦ ※普通にやると Base の演算子を 上書きしてしまうので注意! let ~=+ 2~3 # == 2 + 3 end #> 5 let ~=binomial (2:8).~2 # == binomial.(2:8, 2) end #> [1, 3, 6, 10, 15, 21, 28] # 三角数
① ~=◯◯ (応用) • for 式でも利用可能(ローカル スコープになるので安全) • コードゴルフの基本テク: ~=split
とすると ~s とも書け る(空白文字で分割)し s~◦ とも 書ける(右オペランドの値で分 割) → • (あと実は(予約語の後かつ)~の前の空 白も省略できる) for~=(+,-,*,/) println(2~3) end ## 5 ## -1 ## 6 ## 0.6666666666666666 let~=split,s="1 2 3\n4 5 6\n7 8 9" stack(.~(s~'\n'), dims=1) end #> 3×3 Matrix{SubString{String}}: #> "1" "2" "3" #> "4" "5" "6" #> "7" "8" "9"
② a>b=◯◯
② a>b=◯◯ (基本) • Julia の演算子は 《演算式》 =◯◯ という形で定義できる! ◦
比較演算子を定義する場合、戻り 値が Bool でなくても定義できる (エラーにはならない) ◦ ※普通にやると Base の演算子を 上書きしてしまうので注意!(2回 目)(多重定義(メソッド追加)では なく上書きとなることに要注意!) let a > b = a % b == 0 6 .> (1:6) end #> [true, true, true, false, false, true] let a>b=a+2b 6 .> (1:6) end #> [8, 10, 12, 14, 16, 18]
② a>b=◯◯ (応用) • コードゴルフの基本テク: ◦ 比較演算子の定義中に同じ比較演 算子が出てきても良い(再帰関数 の定義になる) ◦
比較演算子は Chain できるの で、再帰関数の終了条件を簡潔に (というかトリッキーだけど短く) 書ける! # 1以上N未満のフィボナッチ数を列挙( 1行ずつ出力) let N=100 n>r=println(r.den)≠r.num<n>1+1/r N>1//1 end ## 1 ## 1 ## 2 ## 3 ## 5 ## 8 ## 13 ## 21 ## 34 ## 55 ## 89
③ x.|>[f,g,h]
③ x.|>[f,g,h] (基本) • Julia には ブロードキャスティ ング という機能があり、関数を 手軽にベクタ化・次元拡張できる
• |>(パイプライン演算子)を組み 合わせると「1つ(または複数)」 の値を 複数の関数に適用 する こともできる! # 普通のブロードキャスティング sin.([1, 2, π/4]) #> [0.841471, 0.909297, 0.707107] # 関数適用のブロードキャスティング π/4 .|> [sin, cos, tan] #> [0.707107, 0.707107, 1.0] # 複数vs複数の例 [1 2 π/4] .|> [sin, cos, tan] #> [0.841471 0.909297 0.707107 #> 0.540302 -0.416147 0.707107 #> 1.55741 -2.18504 1.0 ]
③ x.|>[f,g,h] (応用) • コードゴルフ:Quine ◦ 現在見つかっている最短の Julia Quine(32bytes) ◦
補足:Quine とは(色々な定義が あるがここでは)ソースコードと全 く同一の出力をするプログラムの こと(ソースコードを読み込んで出 力するコードは反則)。 ".|>[show,print]".|>[show,print] ## ".|>[show,print]".|>[show,print] # 解説. # 1. `"a".|>show` は `"a"` と出力される # 2. `"a".|>print` は `a` と出力される # 3. `"a".|>[show,print]` は `"a"a` と出 力される # 4. `".|>[show,print]".|>[show,print]` は `".|>[show,print]".|>[show,print]` と出力される
④ A'B
④ A'B (基本) • A'B は A'*B と等価(乗算演算 子の省略、2x==2*xとかと同じ) •
v'v (v isa AbstractVector) なら ベクトルの内積 が計算できる • @.A'B(A'.*B)だと転置行列との 要素ごとの積(ブロードキャスティン グ) v = [1, 2, 3]; [100, 10, 1]'v #> 123 # 各桁の数字から10進数値を構築 v'v #> 14 # 内積 @.v'v # == v'.*v #> 3×3 Matrix{Int64}: #> 1 2 3 #> 2 4 6 #> 3 6 9
④ A'B (応用) • コードゴルフ:素数列挙 ◦ 2桁以下の素数列挙なら最 短(30bytes, 28chars) ◦
もっと大きい素数列挙だともっと 短く書く別の方法がある(というか そもそもメモリ使用量も計算量も O(N²)なので決して効率は良くな い) R=2:99;@.R[R∉[R'R]]|>println ## 2 ## 3 ## 5 ## 7 ## :《中略》 ## 83 ## 89 ## 97
⑤ A⊆B⊆A
⑤ A⊆B⊆A (基本) • A⊆B⊆A は issetequal(A, B) と等価(つまり「要素の組合 せが一致していれば
true」) • ご想像の通り コードゴルフ (ショートコーディング)以外の応 用は(たぶん)ありません!! A = 1:3; B = [3,1,2,1]; C = [3,1,4]; D = [3,1,2,4]; A⊆B⊆A #> true A⊆C⊆A #> false A⊆D⊆A #> false
⑤ A⊆B⊆A (応用) • コードゴルフ:順列列挙 ◦ A⊆R は必ず成立するので R⊆A とだけ書いている点も
注目。 ◦ その他色々な技を駆使しているの で(お暇な方は)ぜひ解読してみて ください! A>R=R⊆A≠println(join(A,-)),R.|>x->A<A∪x>R []>1:4 ## 1-2-3-4 ## 1-2-4-3 ## 1-3-2-4 ## 1-3-4-2 ## :《中略》 ## 4-2-1-3 ## 4-2-3-1 ## 4-3-1-2 ## 4-3-2-1
⑥ A<A∪x
• A∪x は [A;x] と大体同じ (!isa(A, Set) かつ x∉A ならば)
• A<A∪x は x∉A (!in(x,A))と 大体同じ ◦ 配列の大小比較は各要素の 辞書 式順序 比較(文字列比較と同様) ◦ なので「短い方の配列と要素が同 じ」ならば長い方が大きくなる! ◦ A の要素が大小比較できる必要は あり ⑥ A<A∪x (基本) A = 1:3; all(A∪x==A for x in 1:3) #> true all(A∪x==[A;x] for x in 4:10) #> true all(A<A∪x for x in 4:10) #> true
⑥ A<A∪x (応用) • コードゴルフ:順列列挙(再) ◦ 比較の Chain で A∪x
を再帰 処理に渡せる(バックトラッキン グ) ◦ その他色々な技を駆使しているの で(お暇な方は)ぜひ解読してみて ください! A>R=R⊆A≠println(join(A,-)),R.|>x->A<A∪x>R []>1:4 ## 1-2-3-4 ## 1-2-4-3 ## 1-3-2-4 ## 1-3-4-2 ## :《中略》 ## 4-2-1-3 ## 4-2-3-1 ## 4-3-1-2 ## 4-3-2-1
まとめ
まとめ • Julia でコードゴルフも意外と パズル要素が多くて楽しいよ! • Julia 楽しいよ!
参考
参考文献・リンク等 • Code Golf (コードゴルフコンペサイト) ◦ Wiki: Julia (JuliaのコードゴルフテクTips) •
Tips for golfing in Julia (コードゴルフTips、ただしバージョンが古かった り現在通用しないテクニックもしばしばあるので注意)
ご清聴ありがとうございます。