#Julia言語 配列に関するforループ3題

gist.github.com/genkuroki/94a4…

①整数の和

for x in A
@ inbounds for i in eachindex(A)

よりも

for i in eachindex(A)

が遅い。配列の要素に A[i] の形式でアクセスする場合には論理的なデバッグが終わった後に @ inbounds を付けると速くなる。
#Julia言語 配列に関するforループ3題

gist.github.com/genkuroki/94a4…

②Float64の和

@ simd for x in A
@ inbounds @ simd for i in eachindex(A)

は速いが後者から@ inbounds @ simdの片方を削除するとかなり遅くなる。
#Julia言語 配列に関するforループ3題

gist.github.com/genkuroki/94a4…

③配列にはメモリオーダーでアクセスした方が速い。

2次元配列 A[i, j] の話をforループで計算する場合には、

for j in axes(A, 2)

を外側に

for i in axes(A, 1)

を内側にするべきである。これを逆にするとかなり遅くなる。
#Julia言語 多次元配列アクセスのための多重forループの他の書き方については

discourse.julialang.org/t/how-much-can…



discourse.julialang.org/t/how-much-can…

discourse.julialang.org/t/how-much-can…

を参照。

• • •

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

28 Mar
「立式」は「問題を解くために役に立つ式を作ること」という意味だと誤解する人が多いので、たとえ鉤括弧付きでも使用する場合には説明を付けた方がよいと思いました。

「立式」の意味は概ね「『式  答え 』形式の解答欄の式の項目に先生が暗黙のうちに要求している式を書くこと」です。続く
そして、暗黙のうちに先生が前提にしていることは、

* 場面や考え方を忠実に表現する式が決まっている。
* 問題文をそういう式に変換する「立式」が重要である。

です。これは極めて有害な考え方なので、「立式」を考えることが有害であることをはっきり毎回言って欲しいと思います。
算数教育界ではそもそも「式」の概念自体が非常識なので、学校関係者と算数の話をするときには相手が「式」という言葉を使っていても、非常識な意味で「式」という言葉を使っている可能性を疑う必要があります。

算数で子供達の多くが非常識な「式」概念を強制的に学ばされています。続く
Read 4 tweets
26 Mar
#Julia言語 の多重ディスパッチを強く支持している人達は、「多重ディスパッチのJuliaにはクラスベースのOOPの機能を追加するべきではない」「OOPのデザインパターンはOOPの欠陥を補完するものであり、多重ディスパッチではよりシンプルな方法で解決できる場合が多い」と主張しています。続く
#Julia言語 多重ディスパッチとは、x,y,zの型の組み合わせを変えたとき同名の函数f(x,y,z)で異なるメソッドを実行可能にする機能のことです。x,y,zは平等に扱われる。

f(x,y,z)におけるxおよびその型のみを特別扱いしてx.f(y,z)と書けるようにすれば、よく見るOOPのスタイルになる。

続く
#Julia言語 資料

C++の開発で知られるBjarne Stroustrupさんは、f(x,y,z)をx.f(x,y)と書くスタイルの採用は浅い考えに基く失敗で、多重メソッド(=多重ディスパッチ)の採用が良さそう、のように言っているように見えます。

discourse.julialang.org/t/is-julias-wa…

open-std.org/jtc1/sc22/wg21…
Read 41 tweets
26 Mar
#Julia v1.6.0の公式バイナリが

julialang.org/downloads/

からダウンロード可能になっていて盛り上がっていますね。

新機能を2つ紹介

② sum系の函数で「初期値」を指定できるようになった。空の和もエラーにならないようにできます。

sum(x^3 for x in 1:0; init=0)
→0

これ結構重要。
#Julia言語 v1.6.0

②マクロ版ではなく、函数版sprintfが

using Printf
Printf.format(Printf.format"%15.10f", π)

のように使えるようになりました。

これで実行時可変なフォーマットのprintfを容易に使えます。
#Julia言語 Julia言語では、コンパイル時に与えられたフォーマット専用のコードを生成する爆速のマクロ版printfがデフォルトで使えていました。C版のprintf函数より速い。

しかし、フォーマットが固定されるので不便な場合がたまにありました。v1.6.0以降は使い分ければよいということになります。
Read 4 tweets
25 Mar
#数楽

多項式f∈ℝ[x]に「a∈ℝをf(a)∈ℝを対応させる函数」を対応させる写像は単射なので、多項式fとそれに対応する実数の函数を区別しなくも大丈夫。(無限体でもOK)

有限体F上の多項式g∈F[x]に「a∈Fをg(a)∈Fを対応させる函数」を対応させる写像は単射でないので、それらを同一視できない。
#数楽 例えば二元体𝔽₂={0,1} (1+1=0)について、𝔽₂上の多項式としてxとx²は異なるが、𝔽₂上の函数としてはどちらも恒等写像になって等しくなってしまう。

xとx²を𝔽₂の2次拡大𝔽₄=𝔽₂[α] (α²=α+1)上の函数とみなしたものは互いに異なる。

こういう具体例がノータイムで出て来ることが大事。
#数楽 面倒なのは有理函数(多項式環の分数体の要素)に対応する「函数」の場合。

有理函数ごとに定義域も変わるので、異なる定義域を持つ函数達を同時に扱うための「処理」が必要になる。(これには複数の処方箋がある。)

結果的に、無限体の場合には、有理函数と対応する「函数」は同一視可能になる。
Read 78 tweets
25 Mar
大学生相手であっても、必要な数学の実力は結構高いので、統計学を教えるのに苦労しています。

高校生相手に検定が「お墨付きが得られる道具」であるかのように教えられてしまうようになったら最悪。

あと、信頼区間がモデル依存であることも(大学生と同様に)教えることにならないと思う。
現実には世界的にかなり悲惨なことになっていて、論文を日常的に書いている研究者であっても、統計的検定を「お墨付きが得られる道具」扱いしている人達が沢山いるんじゃないか?

そういう現状は若くて優れた研究者が育つことを妨害していると思う。

こういう問題を維持固定しないような教育が必要。
まだ高校生なのに、「統計的に有意である!」を水戸黄門的な「ひかえおろう!」と同じ意味で使うようになったら最悪(笑)
Read 24 tweets
25 Mar
#Julia言語 リポジトリの方の公式マニュアルに以下が追加されましたね。

* 引数の型の過剰な制限はよくある間違いです。疑わしいなら引数の型を書くのをやめましょう。

* Juliaでは戻り値の型宣言はほとんど使われません。一般に「型安定」な函数を書くべきです。

github.com/JuliaLang/juli…
#Julia言語 具体的には

fib(n::Int) = n ≤ 2 ? one(n) : fib(n-1) + fib(n-2)

はよくある間違で、

fib(n)::Int = n ≤ 2 ? one(n) : fib(n-1) + fib(n-2)

も誤りです。どちらでもBigIntによる計算が不可能になる。よく分からないなら

fib(n) = n ≤ 2 ? one(n) : fib(n-1) + fib(n-2)

でよい。
#Julia言語 無用に引数の型を制限してしまううようだと、NASAでは仕事をできなくなります。(NASAでもJuliaを使っている)
Read 11 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!