#Julia言語 100以下の素数

(a->a[a.∉(a*a',)])(2:100)

これを理解すれば、色々理解できたことになる。

九九の表は (1:9)*(1:9)' で作れる。
∉ は \notin TAB で入力できる。
a.∉(a*a',)の代わりにa.∉Ref(a*a')と書くことが多い。

実験するときには

a = 2:100
a[a.∉(a*a',)]

を試すとよい。 Image
#Julia言語 解説

a = 2:100

のとき、aは2,3,4,...,100が縦に並んでいるベクトル扱いになる。

a'はaの転置で、横ベクトル扱いされる。

a*a' は通常の線形代数によって、2,3,4,...,100の2つの数の積を並べた99×99行列になる。続く Image
#Julia言語 100以下の素数全体は、a = 2:100 に含まれる数で行列 a*a' に含まれないものの全体に一致する。

a .∉ (a*a',) は a の各要素 k に写像 k ↦ k ∉ a*a' を作用させた結果になる。真偽値達のBitVectorになる。続く Image
#Julia言語 行列 a*a' をタプルを作る ( ,) で囲んでいるのは dot-syntax によるブロードキャスト(要素単位での作用)から保護するため。

a .∉ (a*a',) は a の中での素数の場所でtrueにそうでない場所でfalseになっている。

a[a .∉ (a*a',)] は a から素数だけを取り出す操作になっている。 Image
#Julia言語 「ドット記法によるブロードキャストのときに、配列様のモノをスカラーとして振る舞わせるにはどうすればよいか?」はJuliaでのよくある質問の1つ。

多くの人がRef( )で包むという解決策を採用しており、このスレッドではタプルを作る( ,)で包む処方箋を採用した。 Image
#Julia言語

a = 2:100 の具象型はUnitRange{Int64}

さらにそれは a isa AbstractVector{Int64} をみたす。

AbstractVector型のオブジェクトは縦ベクトル扱いになる。

レンジがそのまま縦ベクトル扱いされる。配列に変換してメモリの無駄遣いをする必要はない。 Image
#Julia言語 a' は LinearAlgebra.Adjoint 型になり、横ベクトル扱いされる。 Image
#Julia言語 a*a' はMatrix型になる。

一般にAbstractMatrix型に属するオブジェクトは行列扱いされる。 Image
#Julia言語 a .∉ (a*a',) はBitVector型になり、AbstractVector型に属し、真偽値の縦ベクトル扱いされる。 Image
#Julia言語 a[a .∉ (a*a',)] はVector{Int64}型になり、AbstractVector型に属する。

一般にAbstractVector型に属するオブジェクトは縦ベクトル扱いされる。 Image
#Julia言語

a = 2:100; a[a.∉(a*a',)]

にはJuliaでよく使う基本的な事柄が詰め込まれており、理解する価値が十分にあると思う。

これで100以下の素数全体が得られる。

typeof, supertype, dump の使い方もついでに覚えてしまうと、「夜道で迷うこと」も少なくなるだろう。
#Julia言語 添付画像のコードは別スレで紹介したコード。

函数の引数の型がほとんど書かれておらず、Float64やInt64のような型名をユーザー側は全然入力していない。

函数の引数の型はJuliaにおける高速計算では書く必要がない。続く ImageImageImage
#Julia言語 しかし、このスレッドの内容を理解すれば裏で複雑な型システムが大活躍していることがわかる。

Juliaの計算が速いのはこの型システムのおかげ。

既存の遅いプログラミング言語をJulia並に速くするためには、Julia並の型システムを導入する必要があり、破壊的な変更が必要になるだろう。
#Julia言語

(a->a[a.∉(a*a',)])(2:100)

含まれる内容:

* 無名函数
* ユニットレンジ
* ユニットレンジも縦ベクトルとみなされる
* 横ベクトルを転置で作れる
* かけ算で行列ができる
* ユニコード演算子
* ブロードキャスト
* ブロードキャストからの保護の( ,)
* BitVectorによるマスキング

• • •

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

14 Sep
#Julia言語 『数値計算の常識』という有名な本があって第5章のタイトルが「逆行列よさようなら」です。

Juliaでは計画行列Xによるバックスラッシュ演算

β̂ = X \ y

の一発で最小二乗法も計算できます。

github.com/genkuroki/publ…
#数楽 Xが縦長の行列で、β, y が縦ベクトルのときの、βの成分に関する連立一次方程式

Xβ = y

は一般に解を持たないのですが、Xβとyのユークリッド距離を最小にするようなβをβ̂と書いて、「解」とみなすのが最小二乗法の考え方です。その「解」を

β̂ = X \ y

と書くことは記号法的に自然です。
#Julia言語 Juliaがバックスラッシュ二項演算子で最小二乗法も可能にしていることの背景には以上のような数学が隠れています。
Read 13 tweets
13 Sep
#統計 #数楽 この短い動画も非常にためになるし楽しめる。

「変分ベイズ」「変分推論」のように呼ばれる方法は、計算が大変な真の分布φ(w)を特別な形の分布ψ(w)でφ(w)から最も出て来やすいもので近似する方法。続く
#統計 Kullback-Leibler情報量 D(ψ||φ) は、Sanovの定理より、「分布φのサンプルの分布として分布ψに近いものの出て来やすさ」を意味する。

もしも分布ψの台が分布φの台よりも真に大きいならば、そのはみ出した部分の値はφから出て来ないので、D(ψ||φ) = ∞ となる。

続く
#統計 D(ψ||φ) < ∞ ならばψの台はφの台に含まれる。

固定されたφに対して、特別な形のψを動かして、D(ψ||φ) を最小化すると(変分推論!)、分布ψは分布φよりも狭い部分に集中した感じの分布になり易い。

以下のリンク先の場合には実際に概ねそうなっているように見える。
Read 16 tweets
12 Sep
素晴らしいスレッドだったので大量にRTしました。

しかし、最後に「立式」という聴き慣れない有害で特殊な意味を持つ算数教育用語を使ってしまっている点は、人権問題に発展するかもしれないので注意が必要だと思いました。😝

「式  答え 」のスタイルそのものが子供を悪しき枠にはめている。
多くの人が誤解していることですが、「立式」という用語は国語辞典にも載っていない用語で、単に「式を作る」というようなニュートラルな意味を持つ無害な用語ではありません。

子供を害するちょー算数の中核部分と関係している極めて有害な用語なので取り扱い注意です。
「立式」という特殊な用語が歴史的にどのように使われていたかについては、以下のスレッドを参照。

「立式の意図」を以下のリンク先の意味で子供に問う行為は、人権問題に発展する恐れが十分にあります。😝
Read 6 tweets
12 Sep
東京大学出版会の『統計学入門』を運悪く「真面目」に読んでしまい、それに従って、「確率ではなく、割合だ」というスタイルで「信頼区間警察」をやっている側が狼藉之義也の「ヒャッハー」達だという問題。

へたをするとこれが高校数学にも伝搬する恐れがある。
最近の例では

tjo.hatenablog.com/entry/2021/07/…
渋谷駅前で働くデータサイエンティストのブログ
2021-07-16
95%信頼区間の「95%」の意味

がひどい。

教科書に書いてあるという事実は正しいことの証拠にはなりません。
#統計 正しい考え方

* 信頼区間の計算では通常パラメータを持つモデル(例えば正規分布モデルや二項分布モデルなど)が使われる。

* 95%信頼区間の95%はそのモデル内での標本分布で測った確率(の近似値)になる。

* 使用したモデルが現実において妥当でなければ、信頼区間は信頼できないものになる。
Read 22 tweets
12 Sep
一般に印象操作に一所懸命な変な人の意見は適当にスルーした方がよいと思いました。
一般に、難しいことを理解できない人たちで周囲を固めている人の観測範囲内でそれが受け入れられていないことと、それが実際に有用であるか否かは無関係。
大学で統計学が専門じゃないのに統計学の講義を受け持つことになった人にとって、カイヤンさんが説明してくれていることの多くが参考になると思います。

ついつい「流行っている」という理由でベイズ統計の話題に触れるときに、注意するべきことがあります。「主義」に関わる話題は本当に要注意。
Read 6 tweets
11 Sep
#Julia言語 1万人に一人あたり100万円配って、その後ランダムに誰かから1万円を取り上げて(破産していたら取るのを諦める)、別の誰かに配ることを繰り返したときの、保有金額の分布の推移のアニメーション。

分布の収束先は不平等な指数分布。

これは「税額一定」の場合。

github.com/genkuroki/publ…
#Julia言語 不平等な指数分布になった後に、今度はランダムに誰かを選んで保有金額の5%の税金を徴収して別の誰かに配ることを繰り返すとこうなる。

分布の収束先はかなり平等的なガンマ分布。

証明は知らない。誰か教えて!(笑)

(((わざと真剣に考えていない)))

github.com/genkuroki/publ…
#Julia言語 ここからが真に面白い話になる。

さて、ついさっき税額ではなく、税率を一定にしたランダムな富の分配で平等に近付けることができることを紹介した。

税率は5%だった。

問題:税率を50%に上げるとさらに平等になるか?
Read 21 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!

:(