【Julia入門】Juliaの多次元配列④ map、reduce、filterを用いた操作

統計や機械学習に関するプログラミングではPythonRが用いられることが多いですが、近年Juliaも注目を集めています。そこで当シリーズではJuliaの基本構文からライブラリの用い方などについて取りまとめます。当記事ではJuliamapreducefilterを用いた多次元配列の操作について取りまとめを行いました。

Julia入門
https://www.hello-statisticians.com/julia

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

map・reduce・filterの概要

配列の各要素に関数を使用した値の変換や集約、フィルタリングにあたってはそれぞれmapreducefilterが有用です。

使用例

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/