Julia

Julia - Terminal で 1文字ずつ入力を受ける (raw mode)

環境 Julia v1.4.2 OS: ArchLinux read や readline を使うと EOF を入力 (Ctrl-D) したときや Enter を押したときにキーボードから入力したものを取得することができるが、何かしらのキーをタイプする度に入力を取得する方法を紹介する。 # ex.jl using REP…

Julia - キーボードからパスワードを入力する

環境 ArchLinux Julia 1.3.0 CLI でのパスワード入力 readline() や Base.prompt で入力を受ける場合、入力した内容が丸見えでセキュリティもへったくれもない状態なため、パスワードを入力したい場合などには適しません。 goropikari.hatenablog.com 入力し…

Julia - permutedims は何をやっているのか

環境 Julia 1.3.0 がベクトル(1次元配列) or 行列のとき $$ \mathrm{permutedims}(A)[i,j] = A[j,i] $$ ようするに転置を取るのに等しい。 ベクトルの場合は要素へのアクセスの仕方は変わらないが、 ベクトルは になり、その逆も然り。 $$ \mathrm{permutedi…

Julia - #undef か否かを調べる

環境 Julia 1.3.0 配列の要素が undef か否かを調べる時は isassigned を使う Arrays · The Julia Language julia> v = Vector{Any}(undef, 5) 5-element Array{Any,1}: #undef #undef #undef #undef #undef julia> v[1:3] .= 'a':'c' 3-element view(::Arra…

Julia - ドット . を使って method を呼ぶ

約1年前に全く Julia っぽくない邪道な遊びをしていたなということをふと思い出した。 微妙なメモだけは残っていたので供養しておく。 好奇心に負けて倫理的に許されないことをしてしまった気分になった。#julialang pic.twitter.com/ahmRgVFz7t— goropikari…

Julia - retry 機構

環境 Julia 1.3.0 retry ある処理がエラーになってしまったとき、時間を置いて再度実行したらエラーが出ないことはよく有ることです。例えばサーバーにうまく接続できないとか。 そんなときに使うのが retry 機構です。retry 機構を使うことでエラー時の再実…

Julia - ソースコードを読んでみる

gdb を使って Julia のソースコードを追ってみる 環境 ArchLinux Julia 1.3.0 GNU gdb (GDB) 8.3.1 gcc version 9.2.0 (GCC) gdb でソースコードリーディング gdb で追う場合ソースコードからビルドする必要がある。 $ wget https://github.com/JuliaLang/ju…

Julia - Channel コードサンプル

環境 Julia 1.2.0 Golang で Channel を使ってようやく Julia の Channel の動きを理解できた気がする。 capa = 10 c = Channel(capa) function f(c) for i in 1:10 put!(c, i) end end function g(c) for i in c sleep(0.5) println("From g: ", i) end pri…

Julia - プロンプトを変える

この記事は Qiita に 2018/08/15 に投稿したものです。2020/3/26 移行しました。 Julia v1.0 への移行作業のために v0.7 と v1.0 を行ったり来たりしているのですが、色々と動作確認しているうちにどっちのバージョンを使っているのか失念することが度々あっ…

Julia - Lisp を作る

環境 Julia 1.1.1 初めての Lisp 作り 最近、Software Design (2017/05, 08, 09)で連載されていた五味さんの「人工知能時代の Lisp のススメ」を読んだので、Julia で Lisp を作ってみました。 とりあえず、五味さんの SDLisp を機械的に Julia に翻訳しただ…

Julia - PostgreSQL に接続する

環境 ArchLinux PostgreSQL 11.5 Julia 1.1.1 LibPQ.jl 0.11.0 Tables.jl 0.2.10 Docker で PostgreSQL を立ち上げる $ docker run -d --name postgres -e POSTGRES_PASSWORD=test -p 5432:5432 postgres:11.5 Julia から PostgreSQL に接続する julia> usin…

Julia - MySQL への接続・データを CSV・JSON で保存する

環境 ArchLinux MySQL 8.0 Julia 1.1.1 MySQL.jl 0.7.0 JSON.jl 0.21.0 Tables.jl 0.2.10 Docker で MySQL を立ち上げる $ docker run --name mysql -e MYSQL_ROOT_PASSWORD=test -d -p 3306:3306 mysql:8.0 # 以下 MySQL 8.0 の場合は必要 $ cd ~/.julia/pa…

Julia - 配列の実装について

2つの配列を結合するときは何故 push! よりも append! が推奨されるのか? sizehint! を何故使うべきなのか? とかあたりの話。今回は一次元配列 (Vector) のみの話で、多次元配列は扱いません。 最近今更ながらデータ構造とアルゴリズムを勉強しているのです…

Julia - 並列計算用のリダクション演算子を作る

ふと「そういえば、Juliaのリダクション (reduction) は分かりづらかったなぁ」と思い出したので複数の変数をリダクションする方法と自前のリダクション演算子(reduction operator, reducer)の作り方について紹介します。 環境 Julia での for 文の並列化 そ…

Julia - パッケージを効率よく読み込む ~ Requires.jl のすすめ ~

Julia 1.0 が出てから半年経って Julia に慣れてきた頃なのか、私のパッケージの作り方の記事が地味に見られているようなので、パッケージを作るときに知っておいて損はない Requires.jl について紹介します。 goropikari.hatenablog.com 環境 三種の神器 Re…

Julia - PackageCompiler.jl を使って Plots.jl を早くする

PackageCompiler.jl の README によるとついに Plots.jl がコンパイルできるようになったらしいので試してみました。 github.com 環境 Plots.jl をコンパイルする スピードを比較 Linux デフォルト PackageCompiler Windows 10 デフォルト PackageCompiler m…

Julia - IJulia のセルで Bash コマンドを使う

環境 Julia 1.1.0 OS: ArchLinux IJulia で ; から始めると Shell mode になるので Bash*1 コマンドが使えるけれども、2行以上書くと実行できなくなる。 run を使えば長々書くことも出来るけれども、それは面倒だなぁというときは以下のマクロを定義する。 #…

Julia - run を使って Julia の中から Julia を実行する方法

環境 Julia 1.1.0 Julia の中から Julia を実行する Julia を使っていると、 Julia の中から run を使って Julia を起動したいと思うことがあると思います。 このように run(`julia ex.jl`) ただこの方法はすでに julia へ PATH が通っていれば良いのですが…

Julia - キーボードから入力を受ける

環境 キーボードからの入力 任意の個数の入力を受ける 特定の文字が入力されたら停止する方法 Ctrl-D で停止する方法 環境 OS: ArchLinux Julia 1.0.5 ※ 2019/12/22 Base.prompt の例を追加 キーボードからの入力 Python3でいうところの input はJuliaではBa…

Julia - Aizu Online Judge の問題を Julia で解く

Aizu Online Judge (AOJ) を Julia で遊ぶための野良パッケージを作ったので使い方を紹介します。 AOJ とは? このパッケージで出来ること・出来ないこと 環境 インストール 使い方 問題を選ぶ プログラムを作る サンプルでテストする 判定する 制限時間を変…

Julia - @enum で割り当てられた番号から変数名を知る

環境 Julia 1.0.1 string(EnumName(数字)) とするとその数字を割り当てられた変数の名を文字列で取得することができる。 julia> @enum Fruit apple orange kiwi julia> apple apple::Fruit = 0 julia> orange orange::Fruit = 1 julia> Int(apple) 0 julia> …

Julia - 標準入力・出力・エラー出力先を変える

環境 入出力先を変える 使いどころ(?) 参考 環境 OS: ArchLinux Julia 1.0.1 入出力先を変える Python だと stdout を気軽に上書きして標準出力先をファイルにできますが、Julia の場合はそれができません。 julia> f = open("out.txt", "w") IOStream(<file out.txt>) jul</file>…

Julia - VSCode で Julia 1.0 を使う (仮)

julia-vscode v0.11.0 から Julia 1.0 に対応したのでこの記事を読む必要はありません。master ブランチのものを入れたい場合は手順だけ参考になるかもしれません。(2019/1/29) 現状、VSCode の Marketplace から入れることの出来る Julia の拡張機能を使う…

Julia - 関数の broadcast ( f.(arg...) ) をオーバーロードする方法

どこで使うと便利なのかわからないけれど、一応できたのでメモ。 公式ドキュメントだけでこの方法を思いつく人は相当訓練された Julian だと思う(思いたい)。 Julia 1.0 でのやり方 f.(arg...) の挙動を変えたい場合、broadcast でなく、broadcastedをオーバ…

Julia - 定義した method を消す方法

環境 無駄な method を消す pretty-print 落とし穴 参考 LICENSE 環境 Julia 1.0 無駄な method を消す Julia といえば多重ディスパッチが有名ですよね*1。 julia> f(x::Int64) = println("Intだよ") f (generic function with 1 method) julia> f(x::Float6…

Julia - 野良パッケージをパッケージ名だけで追加できるようにする: Custom General Repository の作り方

Julia でパッケージを追加する場合、pkg mode で (v1.0) pkg> add Example などとすれば良いですよね、公式パッケージ*1の場合は。 野良パッケージの場合は次の例のように github の URL を打ち込まないといけません。 (v1.0) pkg> add https://github.com/g…

Julia - 野良パッケージを公式パッケージにする方法

先日、DiracNotation.jl という拙作が METADATA.jl にマージされ、野良パッケージから公式パッケージ*1へと昇格しました。 Julia 1.0 が出て以降では初めてパッケージを新規登録したので不安もあったのですが、とりあえず無事にマージされてほっとしています…

Julia - Jupyter notebook と Julia のソースコードの相互変換方法

Jupyter notebook って便利ですよね。私も数式の入ったメモを入れたい場合や、コードとプロット結果を一緒にしたいときにはよく利用しています*1。 ただ一つ問題があって git との相性が恐ろしいほどに悪いことで有名ですよね。たった1行コードを追加しただ…

Julia - 関数に型そのものを渡す

環境 OS: ArchLinux Julia 1.0.2 型そのものを関数に渡す 整数型の変数とかではなく Int とか型そのものを引数に取る関数を作りたい場合、 hoge(::Type{Int}) = println("Hello World!") の様に引数にとりたい型を Type でくるんでやればいいらしい。 julia>…

Julia - パッケージ作り

目次 目次 TL;DR 環境 自作のパッケージ オリジナルパッケージの雛形を作る テストを書く 自分のパッケージの中で他のパッケージを使う場合 Julia 以外のライブラリに依存する場合 UUID GitHub に公開する MyPackage に PATH を通す METADATA.jl に登録する …