MATLAB移民のためのJulia tips

MATLAB移民のためのJulia tips

何も考えずに速く計算できないのならば、何もやりたくない。

Indicator行列:broadcast

Indicator行列

例えば、各要素は1〜3番目のどれかが1、他は0になっていて、 要素1:1番目が1、他は0
要素2:3番目が1、他は0
要素3:2番目が1、他は0
要素4:1番目が1、他は0
というとき、
1 0 0
0 0 1
0 1 0
1 0 0
という行列。

作り方:broadcast()する

上記のindicator行列を作るとき、例えば配列として

v = [1, 3, 2, 1] #ベクトルの場合はvec(v)

を持っていたとすると、次のようにして作れる*1

IND = broadcast(.==, v, (1:3)')

4x3 Array{Int64,2}:
1 0 0
0 0 1
0 1 0
1 0 0

  • (1:3)'はベクトル[1 2 3]
  • vと(1:3)'を要素ごとに評価(.==)し、値が等しいところで1が立つ。

Boradcastについては、以下参照:
Multi-dimensional Arrays — Julia Language 0.4.3-pre documentation (本家) NumPyのブロードキャストのメモ - 唯物是真 @Scaled_WurmPythonの記事。わかりやすいです。)

*1:ここでの内容はstackoverflow julia lang - convert Array to indicator matrix - Stack Overflow のajcr氏の回答の内容ほぼそのままです。