MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

プログラミング言語Julia逆引きメモ

目次

はじめに

よく忘れて調べ直している

Juliaの文法やTipsに関するメモです。

順次追加予定です。

 

Juliaそのものに関しては、

下記を参照ください。

myenigma.hatenablog.com

二重ループ

シンプルな二重ループを書きたい時に

for x in xlist
    for y in ylist
        # do somthing
    end
end

ではなく、

for x in xlist, y in ylist
   # do somthing
end

とシンプルに書ける。

リストのリストをArrayに変換する

例えば、3つの要素が入っているリストが100個リストとして入っている時に、

それを3x100のArrayにしたい場合は、

a_array = hcat(a...)

とすれば良い。

リスト同士を比較して、同じ要素かどうかを比較

x = [1, 1, 2]
y = [2, 1, 4]
x .== y
#3-element BitArray{1}:
#  false
#  true
#  false

リストを条件検索

x = [1.0, 0.5, -0.2]
t = x[abs.(x).>0.5]
#1-element Array{Float64,1}:
#1.0

シンプルな最近傍点探索

zの中からノルムが一番xに近い要素を選ぶ場合

nearest_neighbor(x,z) = z[ argmin([norm(x-y) for y in z]) ]
z = ( [2,1], [7,2], [5.5,4], [4,8], [1,5], [9,6] );
nearest_neighbor([5,6], z)

2つのベクトルがなす角度を計算

ang(x,y) = acos(x'*y/(norm(x)*norm(y)));

String to byte array

string s = "hoge"
key = Vector{UInt8}(s)

Byte array to string

s = string(key)

Char to ascii int

ascii = UInt8("a")

リストから行列を作る

reshape関数を使います。

下記の通り、片方の次元を指定すれば、

もう片方をコロン(:)で埋めれば自動で行列が計算されます。

f:id:meison_amsl:20190629090550p:plain

 

すでにある配列に値を代入するのを高速化する

すでにある配列に、計算結果を代入したい場合、

下記の例のようにドット演算子を使うと高速化できます。

f:id:meison_amsl:20190629093312p:plain

 

これは、ドット演算子を使った場合、

自動的に一つのループにまとめられる(fused expression)

という機能を使ったもので、

代入時に一時配列を作らないため、

GCの時間が削減されるからです。

 

Juliaのパッケージ管理を厳密にしたい

下記参照

myenigma.hatenablog.com

REPLの使い方がよくわからない

下記参照

myenigma.hatenablog.com

競技プログラミングでJuliaを使ってみたい

myenigma.hatenablog.com

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

 

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com