黒木玄 Gen Kuroki Profile picture
Sep 3, 2020 14 tweets 6 min read Read on X
#Julia言語 コメント

T<:AbstractFloatについて

f(x::Vector{T})
g(x::AbstractVector{T})
h(x)

を sin(sum(x)) で定義すると、不動小数点数のベクトルxでのコンパイル結果は同じになります。

続く

Juliaでのジェネリクス的な関数の書き方(Parametric Methods) qiita.com//honey32/items… #Qiita ImageImage
#Julia言語 スクショのソースコードは

nbviewer.jupyter.org/gist/genkuroki…

にあります。スクショのコードを手で打ち込ませる行為はできるだけ避けたい。(数行までなら問題ないと思う。)

f(x::Vector) は g(::AbstractVector) や h(x) と違って、Vector型とは異なるベクトルのようなもの達に適用できない。続く ImageImageImage
#Julia言語 Vectorではないベクトルのようなもの達全体で使える函数が欲しい場合には f(x::Vector) や f(x::Vector{T}) where T のような形式で函数を定義してはいけません。

そのように定義しても、コンパイル結果のネイティブコードは引数の型を指定しなかった場合と変わらない。 Image
#Julia言語 さらに、f(x::Vector) だけではなく、 g(x::AbstractVector) も Generator 達には適用できません。 Image
#Julia言語 このように、引数の型を指定するごとに、引数の型を指定していなければ自然に適用可能だった場合が次々に適用不可能な場合になります。

ネイティブコードが同じになる場合には計算速度の改善も起こらない。
#Julia言語 は函数に引数を与えたときに、その函数をコンパイルします。だから、Juliaのコンパイラは、函数の引数の型を宣言していない場合であっても、コンパイル時に引数の型を全て知っています。

Juliaでは「コンパイラにヒントを与えるために引数の型宣言を書く」という考え方は通用しません。
#Julia言語 コンパイル時にコンパイラは函数の引数の具体的型を全て知っているので、

  function f(x) ~ end

のように函数を書くときには、

  引数xの具体的な型がすでに決まっている

という状況を想定して、「~」の部分にxの型から他の変数の型が自然に決まるようなコードを書きます。
#Julia言語 xが不動小数点数の配列のようなもののとき、

s =sum(x)

の値の型はxの成分の型になります。 sが不動小数点のとき

y = sin(s)

の値の型は s の型に等しくなる。

こういう感じで引数 x の型から他の諸々のモノの型が自動的に決まって行く。
#Julia言語 そういう型の伝搬がうまく行きそうな場合には、引数の型の制限をできるだけ除いた方が、適用可能な範囲の広い函数ができあがります。

そのようなスタイル(函数の引数の型宣言を書かないことが多いというスタイル)で書いても、速度的な劣化が起こらない点がJuliaの面白い点だと思います。
#Julia言語 Juliaによる型推論の様子は

@ code_warntype f(rand(10))

のようにして見ることができます。@ の後の空白は除く。

これの確認はほぼ必須に近い。

あと、@ timeで実行時間とメモリ割当も確認することが多い。

小さな函数を書く
→テスト
→@ code_warntypeや@ timeも確認
#Julia言語

小さな函数を書く
→テスト
→@ code_warntypeや@ timeも確認
 (BenchmarkToolsやjulia --track-allocation=userなども使用)

の繰り返しになるので、REPLやJupyter notebookなどのインタラクティブな環境にどっぷりつかることは必須だと思う。
#Julia言語 Juliaでは「コンパイラにヒントを与えるために函数の引数の型注釈を書く」ことが無用になっています。

函数の引数の型注釈は純粋にdispatchのために利用されます。

同じ名前の函数であっても、引数の型の組み合わせが異なれば、別のコードが実行されるようにできる。
#Julia言語 multiple dispatchはJuliaの最大の特徴なので、「コンパイラの最適化の効率を上げるために函数の引数の型注釈を書く」のような類の考え方はJuliaにおいては最大のナンセンスだと思います。

「函数の引数の型指定はmultiple dispatchのために行う」と理解しておく必要がある。
#Julia言語 multiple dispatchについては

juliaopt.org/meetings/santi…
The Unreasonable Effectiveness of Multiple Dispatch
Stefan Karpinski
2019


JuliaCon 2019
The Unreasonable Effectiveness of Multiple Dispatch
Stefan Karpinski

を参照。

• • •

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

Aug 29
#統計 サイコロを1万回ふってどの目の確率も1/6に近付くかを調べることについて、

「大数の法則」
「標本調査がどーして成り立つか」
「1万回も投じる必要がない」

と基本的なことを理解していない疑いがある発言をしているところにみんなもっとつっこみを入れるべきだと思いました。
Image
#統計 以下のリンク先の反応も理解していない側に分類されると私は思いました。

確率の計算をある程度できれば「1万回もしなくていい」と安易に言えないはずです。

例えば、試行回数n=10000、成功確率p=1/6の二項分布において、0.99np以下となる確率と1.01np以上となる確率を計算してみて下さい。 Image
#統計 こういう話題の場合には、仮にどの目が出る確率もぴったり1/6ならば、1万回サイコロをふってとき1の目が出た回数がk回以下になる確率やk回以上になる確率がどうなるかを具体的に計算してみた方がよいです。

確率の数値に関する直観を身につけることは難しいので、地道に計算してみるべき。
Read 11 tweets
Jun 13
#統計 いつも言っていることをそのまま書きます。長めのスレッドになります。

以下スクショによるスライドの引用は より。赤字と青字は私による書き込みコメント。

まず、p.12について。詳しい解説に続く。 speakerdeck.com/shuntaros/jia-…

Image
#統計 「違いがない」の型の帰無仮説のP値をnull P値と呼びます。

null P値は「違いは○○である」の型の仮説に関する無数のP値の特別な場合で、null P値へのこだわりは悪しきnullismである云々とGreenlandさんは言っています。

biostat.ucdavis.edu/sites/g/files/…
Image
#統計 平たく言えば、「違いがない」の型の帰無仮説を「null P値<α」という条件によって棄却して「違いはある」という結論を出すためにP値を単純に使うことはP値の誤用の典型例であり、科学のプロセスを害しています。

biostat.ucdavis.edu/sites/g/files/…
Image
Read 36 tweets
Jun 18, 2023
#統計 念の為のコメント

1️⃣「t検定の使用が適切なためには、母集団が正規分布に従っていることが必要である」という考え方は誤り。

2️⃣「Wilcoxonの順位和検定=Mann-WhitneyのU検定であれば、無条件使用は適切である」という考え方も誤り。

以上の誤りを信じている人達をよく見る。続く
#統計

1️⃣「t検定の使用が適切なためには、母集団が正規分布に従っていることが必要である」という考え方は誤り。

これについてはツイッター上で繰り返し非常に詳しく解説して来ました。

ツイログ検索

twilog.togetter.com/genkuroki/sear…
#統計

2️⃣「Wilcoxonの順位和検定=Mann-WhitneyのU検定であれば、無条件使用は適切である」という考え方も誤り。

これについてもツイッター上で繰り返し非常に詳しく解説して来ました。

ツイログ検索

twilog.togetter.com/genkuroki/sear…
Read 40 tweets
Jun 17, 2023
#数楽 ℤ[√2]やℤ[√3]はEuclid整域なのでPIDでUFDになるので、ℤ[√2]やℤ[√3]係数の多項式の √2や√3が出て来る因数分解の問題も既約元の積に分解する問題として意味を持ちます。続く
#数楽 ただし、整数dに関する√dが出て来る場合には、既約元の積への分解は因子の可逆元倍と順序の違いを無視しても一意的でなくなる場合が出て来ます。

実はそういうところに面白い数学が隠れている!
#数楽 整数の平方根が出て来る因数分解もちょっと話題になっていますが、その話はとてつもなく面白い数学の話に繋がっています!

中学生であっても思いつきそうな話の中にも素晴らしい数学が隠れています!
Read 20 tweets
Jun 16, 2023
東工大出身者のような理系の人達が、上野千鶴子が自閉症の母親原因説を唱えるくらい科学的に無能でかつ優しさに欠けた人物であることぐらいは知っておいた方が、我々の社会はよくなる可能性が高まると思います。

有名かつ有力になってしまった人物はたとえク○であっても無視できなくなる。
上野千鶴子は、自閉症の原因について母子密着説を唱えていたのですが、それが誤りであることが定説になっていることを指摘された後には、定説と上野千鶴子的なトンデモ説を平等に扱うという態度を取りました。

上野千鶴子の自分が苦しめた人達への態度は真にあきれるものでした。
上野千鶴子的な活動家は科学的無知と優しさに欠けた態度の両方の力を行使していました。

そういうことを許す伝統が現代においても人々の苦しみの源泉の1つになっているわけです。
Read 6 tweets
Jun 15, 2023
私は、環論を学ぶまで、重根もしくは重解の概念を十分に理解できた感じがしてなかったです。(代数)方程式の概念も同様。

実数体上の方程式x²=0は環

A = ℝ[x]/(x²)

で表現されます。これと方程式x=0に対応する環

ℝ[x]/(x)

は異なる。環論を使えば方程式x²=0とx=0を明瞭に区別できます。
環k上の環Aで表現された方程式のk上の環Bでの解集合はk上の環準同型全体の集合

Hom_{k-ring}(A, B)

で表現されます。例えば、集合として、

Hom_{ℝ-ring}(ℝ[x,y]/(x²+y²-1), ℝ) ≅ {(x,y)∈ℝ²|x²+y²=1}.
そして、以上のような代数方程式の表現になっている環の話について前もって知っておいた方が、環論の勉強はしやすいように思えます。
Read 6 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

Don't want to be a Premium member but still want to support us?

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

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(