眠気.jl

投稿=不定期

Ubuntu18.04へのWolframEngine導入

やってみる

インストール

Free Wolfram Engine for Developers
に行ってLinux用をダウンロードする
Thank You for Downloading the Wolfram Engine
に画面遷移するので,アカウントが無ければGet your licenseをクリックしてダウンロード中に作る(氏名,メルアド,パスワードのみ)
あとは,

:~
$ cd Downloads
: ~/Downloads
$ sudo bash WolframEngine_12.0.0_LINUX.sh

インストールしたい場所, PATH通したい場所を聞かれる
それぞれデフォルトの/usr/local/Wolfram/WolframEngine/12.0, /usr/local/binで問題なければEnter連打で問題ない, 変えたい場合は聞かれたときに入力
インストールが完了すると下記の表示が出る

Installing WolframScript system integration...

Installation complete.
アカウント認証
wolframscript

で起動させる,初回起動のみアカウントを聞かれるのでメルアド(Wolfram ID)とPassを入力

: ~/Downloads
$ wolframscript
The Wolfram Engine requires one-time activation on this computer.

Visit https://wolfram.com/developer-license to get your free license.

Wolfram ID:
Password:

Wolfram Engine activated. See https://www.wolfram.com/wolframscript/ for more information.
Wolfram Language 12.0.0 Engine for Linux x86 (64-bit)
Copyright 1988-2019 Wolfram Research, Inc.

In[1]:= 1 + 1
Out[2]= 2

#Ctrl+Dで抜ける

: ~/Downloads
$

Jupyter notebookに追加したかった

WolframResearchのレポジトリを使う
今現在のJupyter kernel一覧をみてみる

: ~/Downloads
$ jupyter kernelspec list
   julia-1.1 [path]  
   python3

cloneして使わせていただく

: ~/Downloads
$ git clone git@github.com:WolframResearch/WolframLanguageForJupyter.git

: ~/Downloads
$ cd WolframLanguageForJupyter

:~/Downloads/WolframLanguageForJupyter
$ configure-jupyter.wls add
configure-jupyter.wls: Jupyter installation on Environment["PATH"] not found.

ipython addしたり色々したんですが無理でした, どなたか教えてください
追記(2019/05/27)
下記のコマンドでできました

configure-jupyter.wls add [jupyter-notebookのパス] [WolframKernelのパス]

SciPyJapan2019振り返り(1/2)

動機

最近こんな記事を見かけて、自分もSciPy Japan 2019を見に行ったので感想等書いてみたくなったので書いてみました gihyo.jp
公開されているチュートリアルのURLをすべて含んだ良い記事だと思うのでこんな記事読まずに↑こちらの記事読んだほうがいいかもしれないです
この記事で触れられてないところに触れていければと思います

参加費

学生:50$

知ったきっかけ

去年辺りからEnthoutのYoutubeチャンネルを見ていたのでSciPyの存在は知っていた
自分は特にUMAPとJupyternotebookでのシミュレーション環境構築の動画が好きだった www.youtube.com

進行スケジュール

進行は予定通りだった(4/23, 4/24共に) www.scipyjapan2019.scipy.org 初日は

9:00-12:30 チュートリアル

Tensorflow, Josh Gordon, Google
Advanced Numpy, Juan Nunuz-Iglesias, Monash University.
の2つから一つ選ぶ
自分はTensorflowを選びました
GoogleのJosh Gordon氏によると
1. TF2.0はさらにNumpyライクになった
2. Beginnerにとってはあまり大きな変化はない
3. Expertなcode styleはかっこよく書ける
リンク参照→https://storage.googleapis.com/applied-dl/SciPy_Tokyo.pdf
4. TF2.0の例はうまくいかないのもサイトにのっけちゃってる

12:30-1:30 昼食

ビュッフェ形式でした
会場がマンダリンオリエンタル東京だったので,すごい豪華なご飯でした
卑しい人間なので、この1食で元取ったなと思ってしまいました

1:45-2:30 Keynote: f(x)=a+bi

Your (x) future, f, depends on Atoms (real and bits (imaginary: cyber)
Mitsunobu Koshiba, President and CEO, JSR
AI使ってる企業事例の紹介等がありました

2:30-3:00 Apache Arrow, Kouhei Sutou, ClearCode Inc.

Apache Arrowの紹介

C,C++,C#,Go,Java,JavaScript, MATLAB, Python,R,Ruby,Rust,様々な言語で使える
インメモリーデータ向け多言語対応開発プラットフォーム
効率的なシリアライズができる
データを直接扱うことでコピーコスト, パースコストを失くしている

3:00-3:30 Chainer: A Deep Learning Framework for Fast Research and Applications, Crissman Loomis, Preferred Networks

NumPy/CuPy風のChainerX, Chainer CV, RLの紹介

3:30-3:45 休憩

すごい美味しいマカロンが出ました

3:45-4:15 Scaling your Python Interactive Applications with Jupyter, Luciano Resende, IBM

k8sでjupyter notebook立てまくって多言語対応
jupyter notebookでのデータフロー

4:15-4:45 CuPy: A NumPy-compatible Library for High Performance Computing with GPU,Masayuki Takagi, Preferred Networks

cuPyはSciPyの疎行列、FFT、特殊関数、線形代数等をサポートしてる

4:45-5:15 Rapids: GPU Accelerated Data Science, Akira Naruse, NVIDIA

一番衝撃的だった
特にcuDFがpandasライクだがかなり高速になっていた
RAPIDSについては下記のリンクが分かりやすかった
機械学習のすべてをGPUで行おうとしている壮大なプロジェクト

www.slideshare.net

qiita.com

5:15-6:00 ポスター発表及びジョブフェア

JSRさんとEnthoughtさんが展示をされてました
オライリージャパンさんがエレガントなSciPyを無償配布していたのでいただきました,しかも著者のJuan Nunez-Iglesiasがサインもしてくれました

6:00-7:30 レセプション

美味しい食ry

初日の振り返り

マンダリンオリエンタル東京が豪華過ぎて圧倒されました
セッションがこすぎて圧倒されました

juliaの設定.juliaをdotfilesに追加して管理したら便利だった

動機

Juliaのパッケージとかどこにあるんだろう、と思ったらhomeに.juliaがあったのでこれはdotfilesに足すしか無いと思った

やっていく

> cp .julia [dotfiles/homeの場所]

setup.shに追記

#!/bin/bash

DOT_FILES=(.bashrc .bash_profile .vim .vimrc .tmux.conf
.bash_logout .xonshrc .julia)

for file in ${DOT_FILES[@]}
do
  ln -s $HOME/dotfiles/home/$file $HOME/$file
done

.juliaの中身をちょっとみてみる

ls -a .julia
.       compiled  dev           packages
..      conda     environments  prefs
clones  config    logs          registries

それぞれのファイルには大体想像どおりのものがあった

今の所の便利さ

git pullすればstartup.jl反映される, packagesに一回入れたパッケージが残ってる

おまけ

.julia/repl_history.jl に,REPLで打ったコマンドが全て残ってます人によっては(少なくとも私にとっては)黒歴史なのでpublicなdotfilesに置くときは消去するといいかもしれません

https://www.mathwithjulia.com/

JuliaでKullback-Leibler Divergence 1/2

目標

発生させた正規分布に従う乱数同士のKLdivergenceを計算してみる

X\sim N\left(0, 1\right), Y\sim N\left(0.5, 1\right), Z\sim N\left(0, 1.5\right)
使うライブラリ
StatsBase.jl
Distributions.jl

kldivergenceとは

 \begin{array}{l}{q(x), p(x) : p . d . f \text { on } R^{N}} \newline
{K(q | p) :=\int q(x) \log \frac{q(x)}{p(x)} d x}\end{array}
で定義され,p.d.f.同士の差異の大きさを反映している
(distanceとは(私は)呼ばない、対称性がないので)

乱数の生成

julia>

julia> x = rand(Normal(0, 1), 100)

julia> y = rand(Normal(0.5, 1), 100)

julia> z = rand(Normal(0, 1.5), 100)

正規分布同士のkldivergence

2つの正規分布同士の場合、少し頑張ると公式が出せる
2つの正規分布を考える
 N\left(\mu, \sigma^{2}\right), N\left(\xi, \tau^{2}\right)
kldivergenceを計算していくと....?

次回

正規分布同士のkldivergenceの公式
StatsBase.jlのkldivergenceを使ってみる

参考書籍

情報量統計学

Juliaで標準正規分布のプロット(Gadfly.jl)

目標

JuliaでN(0,1)をプロットする(Gadfly.jl)
i.e.
 f(x)=\frac{1}{\sqrt{2 \pi \sigma^{2}}} \exp \left(-\frac{(x-\mu)^{2}}{2 \sigma^{2}}\right) \quad(x \in \mathbb{R})
をプロットする(xは[-5,5]に制限します)

動機

Data Science with Julia
で見たプロットがかっこよかったので、やりたくなった

作業環境

前回同様

やってみる

(v1.1) pkg> activate 0402
(0402) > add FFTW Gadfly Cairo
shell> vim uni.jl

uni.jlを書いていく

using Pkg
Pkg.activate("0402")

using Gadfly, Cairo

Gadfly.push_theme(:dark)
#なぜなら、かっこいいから. 自分で色を設定して、themeとして登録もできる詳しくは  
#http://gadflyjl.org/v0.6.3/man/themes.html#Named-themes-1

f(x, μ, σ) = (1/(√(2*π*σ^2)))*exp(-(x-μ^2)^2/2σ^2)
#正規分布作る  
x = collect(-5:0.1:5)
#numpyならnp.arange(-5,5,0.1)

Standard_Normal_dist = [f(x, 0, 1) for x in x]

p = plot(x=x, y=Standard_Normal_dist)
display(p)

実行してみる

shell> julia uni.jl

ブラウザが開いて,こんな感じになる

できた!

Gadfly.jlの挙動について(おまけ)(3パターン)

ipynbの場合
plot(y=[1,2,3])  

下のセルに出る

p = plot(y=[1,2,3])
display(p)  

ブラウザが開いて出る

.jlを作って,julia .jlで呼ぶ場合
plot(y=[1,2,3])

何も出ない

p = plot(y=[1,2,3])
display(p)

ブラウザが開いて出る

REPLの場合
plot(y=[1,2,3])

ブラウザ開いて出る

注意
  1. plot()はy軸指定だけでも描画されるが、その場合xは0からスタートする
  2. 正規分布は自分で決めなくても,Distributions.jl使えば問題ない
    (私はTeXっぽい書き方が好きなので書いた,合理性はない)

感想

matplotlibのようで、慣れやすいと思った

参考書籍,URL

Data Science with Julia Gadfly公式

Juliaのpkgモード,REPLモード,shellモード,help?のコマンドまとめ

動機

自分がよく忘れたり、?でJuliaに聞いたりするので備忘録

目標

思い出しやすいように書く

作業環境

今回の環境=前回同様

REPL

julia >

ターミナルでjuliaと打ったとき入るモード
ここから
; ? ]
で3つのモードに行ける
pkg,REPLで?を入力してからEnterを押すと詳細な解説が出る,ありがたい

pkg

REPLで ] を打ったら入るモード

(v1.1) pkg > 

(or(自分がつけた環境名)+pkg)
と表示されている

よく使うコマンド

activate (自分で作った環境に入れる、なければ作られる)
add (パッケージを足す)
remove (パッケージを消す)
status (入れたパッケージ一覧などが出る、Pkg.installed()的)

shell

REPLモードで;を打つと入るモード,大体コマンドプロンプトと同じコマンドが打てる
私はよくここでtmuxを起動している(どうでもいい)

shell > 

と表示されている

help?モード

REPLで ? を打つと入るモード

help?>

と表示されている
対話的なヘルプ,自分が決めた関数や,最初からある関数を調べてくれる
例)
+の挙動が知りたいとき

help?> +
search: +

  +(x, y...)

  Addition operator. x+y+z+... calls this function with all arguments, i.e. +(x, y, z, ...).

  Examples
  ≡≡≡≡≡≡≡≡≡≡

  julia> 1 + 20 + 4
  25
  
  julia> +(1, 20, 4)
  25
  ...

自分で決めた関数の場合,次のようになる

julia > foo() = println("foo")
foo (generic function with 1 method)
help?> foo
search: foo floor pointer_from_objref OverflowError

  No documentation found.

  foo is a Function.

  # 1 method for generic function "foo":
  [1] foo() in Main at none:1

感想

備忘録的な記事になってしまったので,有意義な記事書きます(いずれ)

参考にしたURL,書籍

Julia Programming Projects: Learn Julia 1.x by building apps for data analysis, visualization, machine learning, and the web (English Edition)

startup.jlにJulia起動時にやりたいことを書いていく

動機

Juliaが好きだから

目標

setup.jlを書くとJulia起動時に実行したいことを設定できるらしいので,やってみる

作業環境

前回同様,グラボ無い方のpc
ターミナルで作業(HOME)

やってみる

setup.jlはJulia本によると
.julia/configに書くものらしいので場所を探します,ターミナルで

> cd .julia/
.julia> mkdir config
.julia> cd config
.julia/config> touch startup.jl //startup.jlを作成
.julia/config> vim startup.jl //vimで編集する

startup.jlをこんな感じに書き換える

const g = 9.80665
#=
constのが早いらしいので
ちなみにJuliaはconstで決めたものでも変更は可能です
ただしWARNINGは出ます
=#

atreplinit() do(f)
  println("初期値gを9.80665にしておきました")
end

#=
atreplinit()
はREPLの初期化が終わった時に時間指定出来る関数(at REPL init)
=#

保存してから,ターミナルで

julia>

f:id:julialangisthebestlang:20190319225546j:plain
startup.jl
できた!!

感想

よく使う定数や関数はstartup.jlに書いてしまうのもいいかもしれないですね
DockerでJulia動かすときとか便利そうです

参考にしたURL,書籍

Julia Programming Projects: Learn Julia 1.x by building apps for data analysis, visualization, machine learning, and the web (English Edition)