2019年4月15日月曜日

JuliaとPythonの基本文法比較(その1)

Julia言語とPython言語における基本文法の比較を行った際のメモです.

比較はREPLで行っています.プロンプトが " Julia> " となっているものはJuliaで," >>> "となっているものはPythonの実行です.

1. 変数と演算
変数への代入方法はJuliaもPythonも同じです.変数$x$に10を代入する例を以下に示します.
julia> x = 10
10

julia> print(x)
10

>>> x = 10
>>> print(x)
10
Juliaの場合は代入した値が返ってきますが,Pythonの場合はprint関数を用いないと表示されません.

続いて,変数$y$に$x + 10$を代入する例です.JuliaもPythonも同じです.
julia> y = x + 10
20

julia> print(y)
20

>>> y = x + 10
>>> print(y)
20

12 ÷ 10の剰余を計算して表示する例です.JuliaもPythonも同じです.

julia> print(12 % 10)
2

>>> print(12 % 10) 
2

2の3乗を計算して表示する例です.累乗に関してはJuliaとPythonで演算子が異なります.
julia> println(2 ^ 3)
8

>>> print(2 ** 3)
8

なお,Jupyter Notebookでは,剰余と累乗の計算を一つのセルで実行しています.Pythonの方は上記の例と同じ記載で問題ありませんが,Juliaの方はprint関数ではなく,改行付き出力のprintln関数を使わないと改行して表示されません.

計算に関しては,数学と同じように内側の括弧内が優先されます.
julia> x = 2 * ((3 + 4) ^ 2 + 5)
108

julia> print(x)
108


>>> x = 2 * ((3 + 4) ** 2 + 5)
>>> print(x)
108

value1に1.5を代入し,value2に45を代入した上で,value2 ÷  (value1 × value1)を計算し、その計算結果をanswer_valueに代入して,answer_valueの中の値を出力する例を以下に示します.
julia> value1 = 1.5
1.5

julia> value2 = 45
45

julia> answer_value = value2 / (value1 * value1)
20.0

julia> print(answer_value)
20.0


>>> value1 = 1.5
>>> value2 = 45
>>> answer_value = value2 / (value1 * value1)
>>> print(answer_value)
20.0

四則演算についての違いをまとめた一覧表は以下のようになります.

JuliaPython
加算++
減算--
乗算**
除算//
÷, div(,)//
剰余%, rem(,)%
累乗^**

・加算の比較.
記法はJuliaとPythonで同じです.
julia> 3 + 5
8

>>> 3 + 5
8


・減算の比較.
記法はJuliaとPythonで同じです.
julia> 3 - 4
-1

>>> 3 - 4
-1

・乗算の比較.
記法はJuliaとPythonで同じです.
julia> 4 * 5
20

>>> 4 * 5
20

・除算の比較
記法はJuliaとPythonで同じです.
julia> 3 / 2
1.5

>>> 3 / 2
1.5

・べき乗の比較
記法はJuliaとPythonで同じです.
julia> 2 ^ 3
8

>>> 2 ** 3
8

・商(切り捨て除算)の比較
記法はJuliaとPythonで同じです.
julia> 5 ÷ 2
2

>>> 5 // 2
2

Juliaの場合は以下のようにすることもできます.
julia> div(5, 2)
2

julia> div(-5, 2)
-2


・剰余の比較
記法はJuliaとPythonで同じです.
julia> 5 % 2
1

>>> 5 % 2
1

2.データの型
JuliaでもPythonでも,文字と数値といったデータ型の違うモノ同士の演算を行おうとするとエラーになります(数値で型が異なるモノは自動で調整してくれる).

例として,1.0というfloat型と"12.2"というstring型の加算を行う場合について以下に示します.
・1.0 をfloat型からstring型に変換して加算する場合
julia> string(1.0) * "12.2"
"1.012.2"

>>> str(1.0) + "12.2"
'1.012.2'
Juliaで文字列を加算する場合は"*"で連結します.Pythonの場合は"+"で連結します.

・string型の"12.2"をfloat型に変換して,数値として加算する場合
julia> 1.0 + parse(Float64, "12.2")
13.2

>>> 1.0 + float("12.2")
13.2
Julia,Python共に数値の加算なので"+"で普通の加算となります.

・型の異なる数値で演算を行った場合の自動的な型変換
julia> x = 10
10

julia> y = x/2
5.0

julia> println(x)
10

julia> print(y)
5.0


>>> x = 10
>>> y = x/2
>>> print(x)
10
>>> print(y)
5.0
xはint型です.int型のxをint型の2で除算すると,float型の答えが返ってくることに注意が必要です.これは,Julia, Python共に共通です.

一応,型を確認してみると以下のようになり,float型です(Python2系では,int型で返ってきていました).
julia> typeof(y)
Float64

>>> type(y)
<class 'float'>

3.配列 - ベクトル,リスト
ミュータブルな配列はJuliaではベクトル,Pythonではリストとなります.
Juliaでは配列変数,Pythonではリストの宣言を行って配列,またはリストを作成し,変数を引数として各要素を表示した上で,変数 subject_name の型を表示させています.
julia> subject_name = ["国語","算数","理科","社会"]
4-element Array{String,1}:
 "国語"
 "算数"
 "理科"
 "社会"

julia> print(subject_name)
["国語", "算数", "理科", "社会"]
julia> print(typeof(subject_name))
Array{String,1}


>>> subject_name = ["国語","算数","理科","社会"]
>>> print(subject_name)
['国語', '算数', '理科', '社会']
>>> print(type(subject_name))
<class 'list'>

続いて指定した要素を参照してみます.
ここで,注意が必要なのは,Juliaでは要素番号は1から始まるので,要素1を指定すると最初の要素である"国語"が帰ってきますが,Pythonでは要素番号は0から始まるので,要素1を指定すると,2番目の要素である"算数"が返ってきます.
スライスに関しても要素番号の始まりは同じなのですが,最初の2番目の要素を表示させるには,Juliaの場合は [1:2]と[start:end],Pythonの場合は[0:2]と[start:end+1]指定(0から始まり,2 -3番目の要素-の前まで)することになります.
julia> print(subject_name[1]) 
国語
julia> print(subject_name[1:2])

["国語", "算数"]

>>> print(subject_name[1]) 
算数
>>> print(subject_name[0:2])

['国語', '算数']

末尾に要素を追加してみます.
julia> push!(subject_name, "追加")
5-element Array{String,1}:
 "国語"
 "算数"
 "理科"
 "社会"
 "追加"

julia> print(subject_name)

["国語", "算数", "理科", "社会", "追加"]

>>> subject_name.append("追加")
>>> print(subject_name)

['国語', '算数', '理科', '社会', '追加']
Juliaの場合はpush!関数( push!(変数名, "追加する要素" ) を,Pythonの場合は.append関数((変数名.append("追加する要素"))を用います.



0 件のコメント :

コメントを投稿