黒木玄 Gen Kuroki
- いいね数 389,756/311,170
- フォロー 995 フォロワー 14,556 ツイート 293,980
- 現在地 (^-^)/
- Web https://genkuroki.github.io/documents/
- 自己紹介 私については https://twilog.org/genkuroki と https://genkuroki.github.io と https://github.com/genkuroki と https://github.com/genkuroki/public を見て下さい。
2020年09月15日(火)
技術書典オンラインマーケットでEREX工房の「プログラミング言語Julia」を購入しました! #技術書典 techbookfest.org/product/666172...
タグ: 技術書典
posted at 00:07:41
#Julia言語 これは非常に良い例。
Juliaでは、例えば、
自分で作った線形代数のライブラリに関する型を用意して、
Juliaの線形代数のフレームワークで
必要なメソッドを定義してやれば、
添付画像のコードのままで
自分で作った線形代数のライブラリを使った計算を実行
してくれます。続く twitter.com/tymwol/status/... pic.twitter.com/OgjHDCNQlo
タグ: Julia言語
posted at 00:09:46
@eco_tetsu その「相性」の部分についての具体的な説明が欲しいです。
私は繰り返し「論よりコード」と言っている。
「Juliaのリポジトリのコードの~の~行目から~行目にある~について理解すればわかる。要点は~です」
のようなコードに基づく説明を期待。証拠を示すことが大事。
タグ:
posted at 00:27:05
This is so satisfying to watch.
It's not fully implemented yet but one day it will be part of Javis :)
#JuliaLang #Transpose #Animation
Watch & Star: github.com/Wikunia/Javis.jl pic.twitter.com/VQMYvsanGW
タグ: Animation JuliaLang Transpose
posted at 00:50:26
#数楽 実射影平面上の二次曲線について
放物線⇔無限遠射影直線と接する
であることは、絵心のある人であれば、数式の助けを借りずに、絵を描くだけで認識できると思います。
画板上に放物線は地平線に接する楕円として描かれるはずです。
私も手で頑張って描いて納得できました! twitter.com/genkuroki/stat...
タグ: 数楽
posted at 00:52:35
Python/Pandasで適当に書いて、大きなデータを処理すると、長時間かかることがあるので、Julia言語やこの「JuliaDB」も試してみたい。juliadb.org twitter.com/LighthouselabP...
タグ:
posted at 00:56:44
#Julia言語 例
a, bをVectorのようなものとするとき、aとbを連結してVectorを作るのがvcat(a,b)です。
私のCatは単にa,bをstructの中に格納しただけで、まるでVectorのように見えるようにしてあります。
私のCat性質はvcatとIterators.flattenの中間。
nbviewer.jupyter.org/gist/genkuroki... twitter.com/cometscome_phy... pic.twitter.com/wKHIHwPlJO
タグ: Julia言語
posted at 01:25:26
@DanielOCL @tymwol Ok I am not a #Python expert, but that is generally not a good idea as far as I know, since imported functions can overwrite existing ones. You must be much more careful about name collisions in Python than in #JuliaLang. Julia doesn't overwrite, and warns of name collision.
posted at 01:34:21
@genkuroki メモリーへの割り当てが原因.
collect( )をすると実際にメモリに割り当てられます.
btime の出力で,使用メモリが 7.63 MiB となっています.
一方で,Range や Iterator の場合はメモリ割り当てがないので 0MiB です.
メモリに実態を作るための時間が答えです. pic.twitter.com/FZnw2uR2jn
タグ:
posted at 02:10:11
#Julia言語 似たようなことをしてみた↓
nbviewer.jupyter.org/gist/genkuroki...
length(x)=10^6のとき
35ms mean(@ views x[1:N] .* x[k:N+k-1])
15ms mean(i->x[i]*x[i+k-1], 1:N)
10ms mean(x[i]*x[i+k-1] for i in 1:N)
1.3ms @ views dot(x[1:N], x[k:N+k-1])/N
LinearAlgebra. dot が強い! twitter.com/mathsorcerer/s... pic.twitter.com/ODr0ygKEYw
タグ: Julia言語
posted at 02:11:03
@eco_tetsu sumの側は問題にしていません。
collectの結果出来上がる配列のサイズは
約8×200万バイト = 15.26MiB
です。この分だけにメモリ割当はcollectで必ず生じる。
問題にしているのは
どうしてIterators.flattenのみがcollectで
巨大なメモリ割当を必要とする場合が出て来てしまうのか?
です。
タグ:
posted at 02:18:34
@eco_tetsu この問題はこのスレッド中の私の失敗例の話との関連で持ち出したものです。
collect(Iterators.flatten(~))
で生じるメモリ割当は
* JITコンパイル時
* コンパイル後の実行時
の両方で生じ得ます。
私が今晩の失敗例ではJITコンパイルの繰り返しが律速段階になっているっぽい。
タグ:
posted at 02:21:46
@eco_tetsu もしも仮にJITコンパイルが関連しているなら、Julia特有の興味深い話題になり得ると踏んで質問しています。
私の現時点での知識ではこれ以上調べようがないと感じたのでネタにすることにしました。
Iterator.flattenのソースコードさえ読んでいない人は多分答えを出せない。私は読みました。
タグ:
posted at 02:24:44
@genkuroki @eco_tetsu `at-view`の方はここが完全に型不安定(Any-typed)になるっぽいっすね:
github.com/JuliaLang/juli...
原因としては、viewの型がかなり複雑なので、JITの過程で型がwideningされてしまうことです。
このgistの結果を見ていただけるとわかりやすいかもです:
gist.github.com/aviatesk/c1026...
タグ:
posted at 02:52:56
@genkuroki @eco_tetsu おそらくそこの型不安定性がメモリ割り当てを増大させてて、実際にプロファイリングしてもその行で時間が取られてました
(Junoのプロファイラ使うとめちゃわかりやすいのでおすすめです:
e.g. `at-profiler f(a, b)`
タグ:
posted at 02:57:33
@genkuroki @eco_tetsu wideningは複雑な型をより抽象度の高い型に遷移させることで型推論の収束性を保つヒューリスティックです。
詳しくはこれとか(juliacomputing.com/blog/2016/04/0...)、あとは僕の卒論でもちょっと説明してます(github.com/aviatesk/grad-...)
あと余計な補足をすると、関数呼び出しの深い部分での型安定性を調べるときは
タグ:
posted at 03:07:17
@genkuroki @eco_tetsu Cthulhuってパッケージが使いやすくておすすめです:
github.com/JuliaDebug/Cth...
それと、ご存知かもしれないですがglobal variableを使って`at-btime`するときは`$`使ってinterpolationしてあげた方がいいです:
github.com/JuliaCI/Benchm...
タグ:
posted at 03:10:21
@kdwkshh @eco_tetsu 深夜にどうもありがとうございます。
説明を読んで、現時点では自力での理解は無理だったこともわかりました。
面白いです!
タグ:
posted at 03:30:38
@yiyuezhuo @DanielOCL @tymwol My point is that in Python this is a necessity due to poor handling of name collisions. In Julia this isn't much of a problem and so `using PackageName` is totally safe to do in Julia. I didn't quite follow your last point about determining a name. You talk about locating a func?
タグ:
posted at 06:18:37
DSCF_1224_open @DSCF_1224_open
Juliaでの自作複合型に対する演算子オーバーロード
gist.github.com/DSCF-1224/b650...
タグ:
posted at 06:57:56
非公開
タグ:
posted at xx:xx:xx
https://mathstodon.x @abel_siqueira
O tópico das aulas de Otimização em @JuliaLanguage desta semana é *Newton*. Trago 3 aulas tratando de Newton purinho, e do controle de passos com busca linear e região de confiança.
youtu.be/Bzy2ZRvedQo
youtu.be/8KHLj_h2ETA
youtu.be/T-eAbhXHeyA
#JuliaLang #Optimization pic.twitter.com/XWitfsGfM2
posted at 08:39:41
Re: RTs
仮定:誰かが行列のFooMatrix型を定義し、それについての基本演算を独自に実装し、FooMatricesという名前のパッケージとして配布しており、そこにcholeskyメソッドも含まれていたとします。続く
タグ:
posted at 10:55:47
#Julia言語 とC++などの本質的な違いについては下のリンク先を参照。このスレッドとの関連は
Pet ↔ AbstractMatrix
Dog ↔ Matrix
Cat ↔ FooMatrix
のような類似を考えれば分かります。
Juliaのエコシステム内では他人の書いたコードの相互利用が非常にうまく行っている理由がまさにこれ。 twitter.com/genkuroki/stat...
タグ: Julia言語
posted at 11:10:15
全体を暗記できる数行程度のプログラムのコードならスクショを証拠として提出しても良いとは思いますが、「第三者でも確認可能」の中に「スクショで示された長くて複雑なコードを第三者が手で打ち込み直せば確認可能」というのが混じっているのは困る。
タグ:
posted at 11:33:17
@genkuroki こんな感じで encounter の引数をテンプレート化すると Julia 版のようにフォールバックされなくなります
gist.github.com/mrkn/0b156c2d3...
タグ:
posted at 11:47:32
Mikola " petertodd" @MikolaLysenko
@tymwol for this example #julialang clearly wins
タグ: julialang
posted at 12:10:12
@mrkn こちらでも動作確認を終了しました。
多くの人にとってありがたい情報だと思うので、
gist.github.com/genkuroki/8e04...
にも追加しておきました。追加がご迷惑なら、追加を削除して、こちらのスレッドにリンクをはって説明するだけですますので言って下さい。
タグ:
posted at 12:23:17
Thanks everyone so much for supporting the Javis project!
The project grew by more than 25% on GitHub from 67 to 85 stars - just today! 😱
@Wikunia_de and I look forward to keeping on developing Javis!
Project link: github.com/Wikunia/Javis.jl
#julialang #opensource #programming pic.twitter.com/UkiyWHKJB4
タグ: julialang opensource programming
posted at 12:34:01
#Julia言語 関連
nextjournal.com/sdanisch/the-j...
The Julia Language Challenge
Rules
* There are 3 categories: developer effort, performance and extensibility.
* A successful implementations needs to shine in all 3 categories.
回答例→ medium.com/@wolfv/the-jul...
タグ: Julia言語
posted at 12:54:20
非公開
タグ:
posted at xx:xx:xx
@tp2750 I wrote DataConvenience.jl for convenience. I only export the @> for piping.
You can also use Lazy.jl but it exports `groupby` which can cause issues with DataFrames.jl
Also, DataConvience exports a `filter(::AbstractDataFrame, stuff)` signature which is lacking otherwise.
タグ:
posted at 13:27:16
TIL moving columns in DataFrames.jl is really easy using the magical colon symbol.
#JuliaLang #DataScience pic.twitter.com/A8fb6GjS9J
タグ: DataScience JuliaLang
posted at 13:28:18
@TaleOfDuckedon #Julia言語 ごめんなさい。困ることになりそうなコードの例(Julia以外でも擬似コードでも可)が示されていないので、どういう心配なのか理解することが難しいです。
「論よりコード」だと思うので、ひとまずは、次のリンク先のコードを見て下さい。
nbviewer.jupyter.org/gist/genkuroki...
simplest FooMatrix pic.twitter.com/OZdUmFdjnK
タグ: Julia言語
posted at 13:31:25
@TaleOfDuckedon #Julia言語
struct FooMatrix{T, U<:AbstractMatrix{T}} <: AbstractMatrix{T} ~ end
の
<: AbstractMatrix{T}
の記述のおかげで、FooMatrixについて定義されていないメソッドについては、AbstractMatrixに定義されているメソッドが自動的に使われることになる。
これはJulia以外でも普通。
タグ: Julia言語
posted at 13:33:45
@TaleOfDuckedon #Julia言語
以下の例も参考になると思います。DogやCatをMatrixやFooMatrixの類似物とみて、PetをAbstractMatrixの類似物と考える。
その類似における違いはAbstractMatrixで定義されている fallbacks がPetとは違って非常に充実していることです。
gist.github.com/genkuroki/8e04... pic.twitter.com/emVhPlPQkR
タグ: Julia言語
posted at 13:40:08
@TaleOfDuckedon #Julia言語 以上のような考え方による他人が書いたコードの利用は、Juliaだとmultiple dispatchのルールに従ってシンプルに理解できます。
しかし、そうではない場合には色々おまじないの記述が必要になって面倒になったりします。直観的にそうなって欲しいことの実現への手間が増える。
タグ: Julia言語
posted at 13:41:55
@PhDemetri @quantadan @pumas_ai is specially licensed so it’s only distributed via @JuliaComputing’s JuliaPro (there are a small number of packages like this). Let me know if you have any questions. #JuliaLang
タグ: JuliaLang
posted at 13:50:39
#超算数 これは、
式が場面を表す
引き算意味=求残と求差
求残のキーワードは「のこり」
という、超算数を煮詰めて濃縮したクソ問題・クソ採点だが、
「主語が箱の中だから文法的に間違い」と間違った認識の人たちが、明後日の方向から採点を援護射撃。
#超国語 twitter.com/uochumeinan/st...
posted at 15:37:21
#超国語 で、もしかして学校の国語で、
「文には主語が必須」
「~は、とあればそれが主語」
と誤ったことが教えられているのではないかと疑問がわいてきた。
www.hiroshima-c.ed.jp/center/wp-cont...
「今日は雨がふっていたので,わたしは,家の中で本を読みました。」
「わたしは」がない方が自然に思えるけど
タグ: 超国語
posted at 15:41:31
JuliaのBaseパッケージの関数を並列化したもの。よく使う関数の先頭にThreadsX.とつけるだけで、高速化が期待できる
tkf/ThreadsX.jl | github.com/tkf/ThreadsX.jl
タグ:
posted at 16:05:11
何が間違いなのかわからなかった。二十八の「次の数」は「二十九」だし。
なんで「つぎのかず」がアラビア数字のことになるんだろう??? twitter.com/dum_ishii/stat...
タグ:
posted at 16:27:09
非公開
タグ:
posted at xx:xx:xx
非公開
タグ:
posted at xx:xx:xx
基本的に俺は目的ドリブンで言語を習得するんだけど、juliaやRustは使えるとこれが出来る/圧倒的に楽になる、みたいなのが今のところ自分の中にあまりないので漫然と習得できないまま終わりそう
タグ:
posted at 17:41:01
Cristóvão D. Sousa @CristovaoDSousa
@tymwol #julialang
I'm biased by everything Julia, but even so, Julia has a higher signal-to-noise ratio in this case.
タグ: julialang
posted at 19:03:26
#Julia言語 k=1~10, N=10^6-9
A: mean(@ views x[1:N] .* x[k:N+k-1])
B: mean(i->x[i]*x[i+k-1], 1:N)
C: mean(x[i]*x[i+k-1] for i in 1:N)
D: @ views dot(x[1:N], x[k:N+k-1])/N
の4つの結果の浮動小数点数としての違いにも注目。A, Bはほぼ同じで、Dはそれらに非常に近いが、Cは離れている。 pic.twitter.com/RNtjzyhJfi
タグ: Julia言語
posted at 19:50:41
@yiyuezhuo @DanielOCL @tymwol The problem with `from m import *` in Python is that it will overwrite identifiers from other modules with the same name. That problem does not exist in Julia. Hence Julia `using Foobar` is totally safe, and preferable.
タグ:
posted at 19:51:35
@sensei_taihen あれ? わかっていらっしゃると思ったのに。
小学校に限らず、学校というものは児童・生徒・学生の情報入手経路を独占する権限も能力も持ちません。学校で習ったこととそれ以外からの情報が食い違ってどちらが正しいのだろうと評価される圧に常に晒されている存在です。
タグ:
posted at 19:55:16
@sensei_taihen たとえば、私は小学校の理科で学ぶ程度の科学知識はそのずっと前に当時の子供向け百科事典等で獲得していました。当時の先生が理科の時間にその知識と矛盾する説明をすることはしょっちゅうでした。私は、その先生は理科が苦手なのだと評価していました(口には出しませんでしたが)。
タグ:
posted at 20:02:15
@yiyuezhuo @DanielOCL @tymwol I would say it is much easier in Julia. In #Python how do you quickly lookup the code for `obj.foobar()`? In Julia you can just write `@edit foobar(obj)` and you jump to the implementation. Or you could lookup the help for that method with `? foobar(obj)`. #JuliaLang
posted at 20:04:30
@karencfisher @DanielOCL @tymwol Yes, but in Python you must take care to do that explicitly. If you forget, you risk overwriting a type of function accidentally. You have no such worries in Julia, so mass import of types and functions is risk free.
タグ:
posted at 20:07:07
#Julia言語 C: mean(x[i]*x[i+k-1] for i in 1:N) だけが他から離れていると言っても、値に 10⁻¹³ オーダーの違いしかないのだから大した問題にならないと思った人もいるかもしれませんが、もとのコードをもう少しましなものに改造してFloat32の場合に計算すると「あっ!」と叫ぶことになる‼️ pic.twitter.com/H4GsAvkxFJ
タグ: Julia言語
posted at 20:07:10
@sensei_taihen まさかと思いますが、教員は教え子から常に評価を受けていることを自覚せずに教員をやっていたりしませんよね。それは危険です。(教え子の教員への個々の評価が正当であるかどうかは別問題です。念のため)
タグ:
posted at 20:11:13
@AruEcon www.julia-vscode.org I wouldn't consider a notebook a development environment 😉
タグ:
posted at 20:20:16
#Julia言語 Float32の精度で計算しても、A,B,Dでは理論通り約0.25の値が得られていますが、Cでは0.167のような全然違う値になっている!
Cの方法でNを増やしながら計算した結果は添付画像の通り。
Nを増やすと理論値の0.25から離れてどんどん小さくなる!(笑) pic.twitter.com/uPuW5YXkym
タグ: Julia言語
posted at 20:29:58
#Julia言語 私は他人にスクショからのコードの写経をあんまりやらせたくないので、ソースコードにリンクをはりたいと思っています。リンク↓
gist.github.com/genkuroki/7393...
一時期1~2日くらいの間GistでのJupyter notebookの表示が劣化していたように思うのですが、結果的に改善された感じがする。
タグ: Julia言語
posted at 20:50:05
通常のケースでは「我々の側が常識的でかつ一方的に正しい」という態度で議論してはいけないものだと思います。
しかし、かけ算順序固定強制問題を微小な氷山の一角として含むチョー算数問題ではそれをやらない方が有害だと思います。
タグ:
posted at 21:02:33
ガースーは「国債を発行して雇用を守る」と言った。時間はない。1秒でも早くやってもらおう。
【内定取り消し、昨年の5倍 - 共同通信】 this.kiji.is/67848245385815...
@sugawitter
タグ:
posted at 21:06:30
子供時代に、学校の先生も含めて、他人と違うことを言ったときに褒められた記憶しかない。
市民図書館でも、優しい司書の人に、こんな本を読んだらと勧められた本にも良い影響を受けている。
大人は子供にそういう感じで親切なのが普通だとおもっていたが、ここ数年、がっかりすることが多い。
タグ:
posted at 21:26:13
#Julia言語 のmultiple dispatchを使い始めたとき、最初に出会う「うざいこと」は
MethodError f(~) is ambiguous
と言われまくること。
しかし、添付画像を見れば分かるように、Possible fix をJuliaは教えてくれるので、焦らず冷静に対処すれば大丈夫です。 pic.twitter.com/wpAMGOLnhf
タグ: Julia言語
posted at 21:48:57
マナー講習に似てるかも。ローカルルールだということを徹底周知しないとトラブルの原因を増やすだけだと思う。 twitter.com/genkuroki/stat...
タグ:
posted at 22:02:21
@yiyuezhuo @DanielOCL @tymwol @edIT Complete opposite for me. Much easier for me to read and understand Julia code. When I read Python code I really miss type information. I miss source code for all important stuff. I miss the well formatted online documentation and great code examples.
タグ:
posted at 22:25:55
@yiyuezhuo @DanielOCL @tymwol @edIT It is a bit big topic to explain why I find Julia easier to read, as there are so many details. This article I wrote on Machine Learning in #Python and #JuliaLang may explain better: medium.com/@Jernfrost/pyt...
posted at 22:28:57
@DocSparse @tymwol The #JuliaLang code should handle sparse matrices without modification
タグ: JuliaLang
posted at 23:05:43
非公開
タグ:
posted at xx:xx:xx
Stefan Karpinski @StefanKarpinski
This is incredible:
- user submits an apparent #JuliaLang bug
- Julia dev (@KenoFischer) debugs it remotely
- discovers that the cause is a hardware problem
This diagnosis turns out to be correct:
he remotely diagnosed faulty physical memory 😲🤯 twitter.com/KenoFischer/st...
タグ: JuliaLang
posted at 23:25:24
@CHOHCOOH2 #Julia言語 では
a = [1, 2, 3, 4, 5]
b = a
b[begin+2] = 0
↓
a も b も [1, 2, 0, 4, 5] になる
こうなって欲しくなければ b = copy(a) とする。
こういう仕様になっているプログラミング言語は結構多いと思います。
Cと同じ速さの計算速度と書き易さを両立したければJuliaは非常に便利です。 pic.twitter.com/lVPgWmRjEw
タグ: Julia言語
posted at 23:32:54
非公開
タグ:
posted at xx:xx:xx
@CHOHCOOH2 #Julia言語 ソースコード
gist.github.com/genkuroki/8015...
スクショのように、配列の最初から2つ後の成分を書き変える函数もシンプルに書けます。 pic.twitter.com/MXTwWrgNaB
タグ: Julia言語
posted at 23:41:31
@CHOHCOOH2 2行目で b[2] = 0 とすると a と b の第二成分が変わります。
b[begin+2] の begin は配列bにおける最初のインデックス(この場合は1)を意味しています。
JuliaにはOffsetArrays.jlというパッケージがあり、配列のインデックスの始まりを自由に選べるので、安全のためにこういう書き方をしてみた。
タグ:
posted at 23:44:08
@CHOHCOOH2 #Julia言語
スクショでb[3] = 0 で a[3] も 0 になっていることがわかります。
ソースコード↓
gist.github.com/genkuroki/8015... pic.twitter.com/s9NbgMKqzq
タグ: Julia言語
posted at 23:47:01
非公開
タグ:
posted at xx:xx:xx
Richard McElreath @rlmcelreath
so @JuliaLanguage supports rational numbers and I think I might be addicted. docs: docs.julialang.org/en/v1/manual/c... pic.twitter.com/CZ5Ab329SD
タグ:
posted at 23:49:36
@CHOHCOOH2 a = [1,2,3,4,5]
b = a
b[1+2] = 0
で
aは[1,2,0,4,5]
になります。Juliaの配列は基本的に参照なので、b=aとすると参照をコピーしたことになりアドレスが共有されます。値のコピーならb=a[:]あるいはb=copy(b)です
タグ:
posted at 23:49:42