を使うのに、今一度
で使い方を整理する。
注意
参照文献はかなり古い(2019年)ため、現在のバージョンでは動作しない関数などが多いとの評判がある。そこでそういった齟齬があった場合は随時コメントする。なお筆者の環境は、
アプリケーション | バージョン |
---|---|
である。
3. Juliaによる数値演算
3.1 行列処理の高速化
ここではループを用いて行列計算を行う。ここで重要なのは、では列方向に処理した方が効率が良い点である。
######################## ### 行列演算の高速化 ### ######################## # Juliaは列方向での演算が効率的 # 列方向での演算 function sum_by_col(x) s = zero(eltype(x)) # コードが型安定にあるようにしている for j in 1:size(x, 2) for i in 1:size(x, 1) s += x[i, j] end end s end # 参考:行方向での演算 function sum_by_row(x) s = zero(eltype(x)) # コードが型安定にあるようにしている for i in 1:size(x,1) for j in 1:size(x,2) s += x[i,j] end end s end using BenchmarkTools x = rand(10^4, 10^4) @btime sum_by_row(x) @btime sum_by_col(x) @btime sum(x) println(sum_by_row(x)) println(sum_by_col(x)) println(sum(x))
上記のように、
- ① 組み込み関数(
)
- ② 列方向で計算する自作関数(
_
_
)
- ③ 行方向で計算する自作関数(
_
_
)
の順番で計算が速い。また加算する順番が相違するため、浮動小数点数の演算精度により、計算結果が相違している。
関数は、1つの命令を同時に複数のデータに適用する並列化の形態である
命令を用いているために自作関数よりも速くなっている。