Juliaという高速プログラミング言語は数理計算が得意
- システム
エンジニア - Juliaというプログラミング言語があるそうですね。
- プロジェクト
マネージャー - はい。JuliaではPythonのライブラリやC言語やFortranのコードを呼び出すこともできるのです。
Juliaというプログラミング言語とは?
Pythonと比べられることが多いJuliaですが、Pythonよりも高速なことで知られ、現在、大注目のプログラミング言語なのです。
また、Juliaは数値計算が得意なプログラミング言語で、今はPythonほどメジャーではありませんが、これからが期待されているプログラミング言語です。
Juliaの利用方法
Juliaの利用方法は公式サイトからexeファイルをダウンロード・インストールし、binフォルダにパスを通せば終わりです。
JuliaはLispなどと同じようにシェルに直接打ち込むインタラクティヴな対話型のプログラミング言語であり、jlファイルとして保存すれば普通にPythonのように扱えます。
Juliaをインストールして付随しているシェルを使うのもいいのですが、パスを通してWindows環境ではPowerShellを使うのが楽です。
JuliaでHello World!
binフォルダにパスを通したならば、PowerShellを「管理者として実行」で立ち上げjuliaと打ち込めばJuliaが起動します。
1
2
3
4
5
6
7
8
9
10
|
PS C:\Users\xxxxx> julia _
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.5.3 (2020-11-09)
_/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release
|__/ |
julia>
|
これでJuliaが使えます。それでは「Hello World!」と出力してみましょう。
1
2
3
|
julia>println("Hello World!")
|
1
|
Hello World!
|
1
2
|
PS C:\(作業フォルダ)> julia .\HelloWorld.jl
Hello World!
|
変数の宣言
Juliaでの変数の宣言は非常に簡単で、Juliaは自動での型推論が実装されています。
1
2
3
4
5
6
|
julia>a = 1
1
julia>b = 1.0
1.0
|
これでa、bが宣言され、それぞれに1、1.0で初期化されます。
if文
プログラミング言語を学ぶ際、分岐処理は必須ですが、Juliaもその例に漏れず分岐処理があり、ここではif文を取り上げます。
1
2
3
4
5
6
7
8
9
|
a = 8
if a % 2 == 0
println("Even")
elseif a % 2 != 0
println("Odd")
end
|
上記のソースコードをevenOdd.jlとして保存します。そして、
1
2
|
PS C:\(作業フォルダ)> julia .\evenOdd.jl
Even
|
と出力されればOKです。
関数
プログラミング言語、Juliaの関数の定義の仕方を見てみましょう。Juliaではコメントアウトは#でします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# function to calculate the volume of a sphere
function sphere_vol(r)
# julia allows Unicode names (in UTF-8 encoding)
# so either "pi" or the symbol π can be used
return 4/3*pi*r^3
end
# functions can also be defined more succinctly
quadratic(a, sqr_term, b) = (-b + sqr_term) / 2a
# calculates x for 0 = a*x^2+b*x+c, arguments types can be defined in function definitions
function quadratic2(a::Float64, b::Float64, c::Float64)
# unlike other languages 2a is equivalent to 2*a
# a^2 is used instead of a**2 or pow(a,2)
sqr_term = sqrt(b^2-4a*c)
r1 = quadratic(a, sqr_term, b)
r2 = quadratic(a, -sqr_term, b)
# multiple values can be returned from a function using tuples
# if the return keyword is omitted, the last term is returned
r1, r2
end
vol = sphere_vol(3)
# @printf allows number formatting but does not automatically append the \n to statements, see below
using Printf
@printf "volume = %0.3f\n" vol
#> volume = 113.097
quad1, quad2 = quadratic2(2.0, -2.0, -12.0)
println("result 1: ", quad1)
#> result 1: 3.0
println("result 2: ", quad2)
#> result 2: -2.0
|
最初の関数 sphere_vol(r)は球体の体積を求めています。次のquadratic(a, sqr_term, b)はsqr_termは未定義です。また、πはpiでJuliaでは定義されています。
三つ目のquadratic2(a::Float64, b::Float64, c::Float64)でのFloat64はパソコンの環境が64ビットということを表しています。ここでsqr_termが定義されています。これをコンパイルすると、
1
2
3
4
|
PS C:\(作業フォルダ)> julia .\functin.jl
volume = 113.097
result 1: 3.0
result 2: -2.0
|
となります。
配列
他にも紹介したい物がたくさんあるのですが、機械学習で必ず使うことになる配列を紹介します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
function printsum(a)
# summary generates a summary of an object
println(summary(a), ": ", repr(a))
end
# arrays can be initialised directly:
a1 = [1,2,3]
printsum(a1)
#> 3-element Array{Int64,1}: [1, 2, 3]
# or initialised empty:
a2 = []
printsum(a2)
#> 0-element Array{Any,1}: Any[]
# since this array has no type, functions like push! (see below) don't work
# instead arrays can be initialised with a type:
a3 = Int64[]
printsum(a3)
#> 0-element Array{Int64,1}: Int64[]
# ranges are different from arrays:
a4 = 1:20
printsum(a4)
#> 20-element UnitRange{Int64}: 1:20
# however they can be used to create arrays thus:
a4 = collect(1:20)
printsum(a4)
#> 20-element Array{Int64,1}: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
#> 15, 16, 17, 18, 19, 20]
# arrays can also be generated from comprehensions:
a5 = [2^i for i = 1:10]
printsum(a5)
#> 10-element Array{Int64,1}: [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
# arrays can be any type, so arrays of arrays can be created:
a6 = (Array{Int64, 1})[]
printsum(a6)
#> 0-element Array{Array{Int64,1},1}: Array{Int64,1}[]
# (note this is a "jagged array" (i.e., an array of arrays), not a multidimensional array,
# these are not covered here)
# Julia provided a number of "Dequeue" functions, the most common
# for appending to the end of arrays is push!
# ! at the end of a function name indicates that the first argument is updated.
push!(a1, 4)
printsum(a1)
#> 4-element Array{Int64,1}: [1, 2, 3, 4]
# push!(a2, 1) would cause error:
push!(a3, 1)
printsum(a3) #> 1-element Array{Int64,1}: [1]
#> 1-element Array{Int64,1}: [1]
push!(a6, [1,2,3])
printsum(a6)
#> 1-element Array{Array{Int64,1},1}: Array{Int64,1}[[1, 2, 3]]
# using repeat() to create arrays
# you must use the keywords "inner" and "outer"
# all arguments must be arrays (not ranges)
a7 = repeat(a1,inner=[2],outer=[1])
printsum(a7)
#> 8-element Array{Int64,1}: [1, 1, 2, 2, 3, 3, 4, 4]
a8 = repeat(collect(4:-1:1),inner=[1],outer=[2])
printsum(a8)
#> 8-element Array{Int64,1}: [4, 3, 2, 1, 4, 3, 2, 1]
|
各配列の内容はコメントアウトされた英語を読めば分かると思います。これをarray.jlとして保存し、コンパイルすると、
1
2
3
4
5
6
7
8
9
10
11
12
13
|
PS C:\(作業フォルダ)> julia .\array.jl
3-element Array{Int64,1}: [1, 2, 3]
0-element Array{Any,1}: Any[]
0-element Array{Int64,1}: Int64[]
20-element UnitRange{Int64}: 1:20
20-element Array{Int64,1}: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
10-element Array{Int64,1}: [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
0-element Array{Array{Int64,1},1}: Array{Int64,1}[]
4-element Array{Int64,1}: [1, 2, 3, 4]
1-element Array{Int64,1}: [1]
1-element Array{Array{Int64,1},1}: [[1, 2, 3]]
8-element Array{Int64,1}: [1, 1, 2, 2, 3, 3, 4, 4]
8-element Array{Int64,1}: [4, 3, 2, 1, 4, 3, 2, 1]
|
となります。
- システム
エンジニア - JuliaはPythonとよく似ていますが、Pythonよりも高速なのですね。
- プロジェクト
マネージャー - そうですね。Pythonよりも高速なことで知られていて、現在、大注目のプログラミング言語です。
これからはJuliaの時代が到来
何かとPthonと比較されるプログラミング言語、Juliaですが、Pythonのライブラリがそのまま使えるなど、柔軟性があり、何よりもPythonよりも高速ということで今大注目のプログラミング言語なのです。機械学習の世界ではJuliaの方が優れているといえます。
これからはPythonよりもJuliaの時代が到来すると予想されます。今からプログラミング言語を学ぼうとしている人で機械学習に興味のある方はJuliaを学ぶことをお勧めします。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
Python新着案件New Job
-
マルチロガーソフト開発/東京都豊島区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都豊島区(池袋駅) -
マルチロガーソフト開発/東京都豊島区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都豊島区(池袋駅) -
商品化予定の振動センサーの運用保守/Python/東京都都内/【WEB面談可】
月給50万~60万円東京都都内(-駅) -
商品化予定の振動センサーの可視化UI開発のテスター/Python/東京都都内/【WEB面談可】
月給25万~35万円東京都都内(-駅) -
商品化予定の振動センサーの運用保守/Python/東京都都内/【WEB面談可】
月給50万~60万円東京都都内(-駅) -
商品化予定の振動センサーの可視化UI開発のテスター/Python/東京都都内/【WEB面談可】
月給25万~35万円東京都都内(-駅)