統計や機械学習に関するプログラミングではPython
やR
が用いられることが多いですが、近年Julia
も注目を集めています。そこで当シリーズではJulia
の基本構文からライブラリの用い方などについて取りまとめます。当記事ではJulia
のmap
、reduce
、filter
を用いた多次元配列の操作について取りまとめを行いました。
・Julia
入門
https://www.hello-statisticians.com/julia
・Julia 1.8 Documentation
https://docs.julialang.org/en/v1/
map・reduce・filterの概要
配列の各要素に関数を使用した値の変換や集約、フィルタリングにあたってはそれぞれmap
、reduce
、filter
が有用です。
使用例
map
map
は配列の各要素に関数を適用して値を変換する際などに用いられる関数です。下記のように実行することができます。
using Random
Random.seed!(1)
X = randn(2,2)
println(X)
println(map(x -> x+2.0, X))
println(map(x-> x*2.0-3.0, X))
・実行結果
[-0.07058313895389791 -0.806852326006714; 0.5314767537831963 2.456991333983293]
[1.929416861046102 1.193147673993286; 2.5314767537831964 4.456991333983293]
[-3.141166277907796 -4.613704652013428; -1.9370464924336075 1.913982667966586]
reduce
reduce
は配列の要約などに用いられる関数です。下記のように実行することができます。
using Random
Random.seed!(1)
X = randn(5,5)
println(X)
println(reduce(+,X))
println(reduce(+,X)/25.0)
・実行結果
[0.06193274031408013 -1.5765649225859841 0.21787878613277867 -1.5242735305753605 -0.5841980481085709; 0.2784058141640002 0.1759399913010747 -0.6559505611509957 -0.7829327668434358 -0.29942199646186524; -0.5958244153640522 0.8653808054093252 0.26751404691066 -0.5370139742021761 -2.3830630673003137; 0.04665938957338174 -2.790281005549307 0.0073860677115008865 -2.0074061601841917 -1.0026135242092884; 1.0857940215432762 -1.8920155582259128 1.0607244834908975 0.16218731766404215 0.972024394360624]
-11.429731672185813
-0.4571892668874325
filter
filter
はフィルタリングなどに用いられる関数です。下記のように実行することができます。
using Random
Random.seed!(0)
X = randn(5,5)
println(X)
println(filter(x -> x > 1, X))
・実行結果
[-0.23190906957695134 1.1722448627021573 -0.26988492037793593 0.13457571047366457 -1.0745769949749375; 0.940390210248594 -1.696813019281842 0.5780036022342506 0.16554255091922548 -1.3819748518823003; 0.5967616711335215 -2.1161459685604527 1.1603442420756227 -1.0720974154467635 0.9518527642027133; 1.9978240930577937 0.5583656057835097 0.28788799558526296 -1.2601642953877346 -0.2922912657969977; -0.05156184220322609 -0.8647295755028067 -0.44119282303422414 0.196408003082906 0.23759838081412232]
[1.9978240930577937, 1.1722448627021573, 1.1603442420756227]
参考
・Julia 1.8 Documentation
https://docs.julialang.org/en/v1/