Juliaを触ってみた

#1. はじめに
研究中にJuliaを少し触ってみたので環境構築から実際にプログラムを走らせるまでの手順を書き記す．
#2. 環境構築
[こちらの記事](https://qiita.com/nomunomu5678/items/c527b8604a1337357dec)を参考に環境構築を行う．
##2.1. インストール
以下のパッケージをそれぞれ公式サイトからダウンロード，インストールする．
VSCode上でJuliaをJupyterで実行したい場合，VSCodeはInsiders版を利用する必要がある点に注意する．

* Julia 1.6.4 (64-bit) (https://julialang.org/downloads/)
* Visual Studio Code Insiders 1.64.0(x64) (https://code.visualstudio.com/insiders/)

##2.2. 環境変数の設定

1. タスクバーの[ここに入力して検索]に[環境変数]と入力し[環境変数を編集]をクリック
1. ユーザー環境変数の[Path]を選択し，編集をクリック
1. 新規をクリックし，JuliaとVSCodeのPathをそれぞれ追加
    * インストールの際，インストール先をデフォルトに設定した場合のPathはそれぞれ以下の通りになる．
    
        ```
        C:\Users\ユーザー名\AppData\Local\Programs\Julia-1.6.4\bin
        C:\Users\ユーザー名\AppData\Local\Programs\Microsoft VS Code Insiders\bin
        ```
    * インストール先を他に設定した場合は，指定先のPathを入力する必要がある

##2.3. VSCodeの設定

1. VSCodeを起動し，`Ctrl+Shift+X`でExtensionsを開く.
1. JuliaとJupyterをそれぞれ検索し，インストールする.
1. Juliaの拡張機能にPathを通す．
    * 歯車マークから[Extension Setting]を選択し，[Executable Path]の項目にJuliaの実行ファイルのPathを設定する
![スクリーンショット (53).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2415245/dfbb25a6-c33b-4038-648d-07fe803e37fa.png)
![スクリーンショット (56).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2415245/2e674270-749c-0fc7-c6fb-5af3c4693424.png)
   + インストールの際，インストール先をデフォルトに設定した場合のPathはそれぞれ以下の通りになる.
   
        ```
        C:\Users\ユーザー名\AppData\Local\Programs\Julia-1.6.4\bin\julia
        ```

##2.4. 動作確認

* Juliaが正しくインストールされているか確認する．
    1. `Ctrl+@`でTerminalを開く．
    1. `julia --version`と入力し，インストールしたJuliaのバージョンが表示されるのを確認する．
    
　　　　　　![スクリーンショット (58).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2415245/fb576308-693f-6fe1-5658-911b7776aabf.png)




* 次にVSCode上でJupyter Notebookが正常に動作するか確認する．
    1. Terminalで`julia`と入力し，REPLを起動する．
    1. `import Pkg; Pkg.add("IJulia")`と入力し，IJuliaをインストールする．
    1. `Ctrl+Shift+P`でコマンドパレットを実行し，`Preferences: Open Settings (JSON)`を選択する．
    1. `settings.json`に以下を追記する．
   
        ```json:settings.json
        {
        "jupyter.experiments.opuOutFrom": ["NativeNotebookEditor"]
        }
        ```
    1. `Ctrl+Shift+P`でコマンドパレットを実行し，`Jupyter: Create New Jupyter Notebook`を選択する．
    1. 右上の`Select Kernelをクリックし，`Julia 1.6.4`を選択する．
    1. セルに以下を入力し，`Ctrl+Enter`で実行する．`Hello World`が出力されれば動作確認完了．
    ![スクリーンショット (62).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2415245/72ff5568-e68c-b473-754d-fc1952ddae55.png)

#3. 速度比較

* Juliaの特徴として高速な動作が挙げられるが，本当に速いのかPythonと比べてみた．
* 今回はバブルソートの実行時間で比較してみた．条件は1~10000までの数字から50000個の数字を重複ありで無作為に抽出した配列をソートしたときの実行時間を計測．

##3.1. 使用コード
* 使用したコードはそれぞれ以下の通りになっている．

###3.1.1. Julia

```julia:BubbleSort.jl
function BubbleSort(data)
    for i = 1:length(data)-1,j = length(data):-1:i+1
        if data[j-1] > data[j]
            temp = data[j]
            data[j] = data[j-1]
            data[j-1] = temp
        end
    end
end

data = rand(1:10000,50000)
@time BubbleSort(data)
```

###3.1.2 Python

```python:BubbleSort.py
import numpy as np
import time

def BubbleSort(data):
    for i in range(len(data)):
        for j in range(len(data)-1, i, -1):
            if data[j-1] > data[j]:
                temp = data[j]
                data[j] = data[j-1]
                data[j-1] = temp

data = np.random.choice(np.arange(1,10000),50000)

start = time.time()
BubbleSort(data)
calc_time = time.time() - start
print("{} seconds".format(calc_time))
```

##3.2 結果

* 実行結果はそれぞれ以下の通りになった．

###3.2.1. Julia
![スクリーンショット (64).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2415245/85ad6a5e-cdb2-3b57-6e19-38f60553b526.png)

###3.2.2 Python
![スクリーンショット (65).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2415245/65190562-f06b-897b-cc08-7c44558bb695.png)

###3.2.3 まとめ
今回の結果からJuliaはPythonに比べ明らかに高速であることが分かった．処理にもよると思うが今回のケースでは約180倍Juliaが速いという結果になった．これから先Pythonだと計算時間がかかってしまうような処理を扱う場合，Juliaで代用するのもいいかもしれない．

#4. おわりに
今回Juliaを少し触ってみた．JuliaでYOLOも触ってみたので機会があれば書いてみたいと思う．