実践Julia入門

書籍情報

発売日 : 2023年03月15日

著者/編集 : 後藤 俊介

出版社 : 技術評論社

発行形態 : 単行本

書籍説明

内容紹介

文法の基礎から数値計算、データ解析、機械学習の実践例まで総合的な開発に耐えうる“貪欲”な言語の特徴を詳解。

目次

【入門編】
#第1章 Juliaのインストールと開発

##1-1. Juliaの特徴
###1-1-1. Juliaは高速!
###1-1-2. Juliaは動的!
###1-1-3. Juliaは動的型付け!
###1-1-4. Juliaは多重ディスパッチ!
###1-1-5. 直感的な記述!
###1-1-6. 真のマクロ!
###1-1-7. 並行・並列プログラミング!
###1-1-8. 組み込みパッケージマネージャ!

##1-2. Juliaのインストール
###1-2-1. Juliaの公式バイナリをインストールする
####Windows (Windows10、Windows11)
####macOS (x86、ARM)
####Linux
###1-2-2. juliaupを利用したインストール
#### juliaupのインストール(Windows10、Windows11)
#### juliaupのインストール(Linux、macOS等)
#### juliaupによる Juliaのインストール・更新(Windows/Linux/macOS共通)
####コラム. 安定版とLTS版

##1-3. Juliaを REPLで使用する
###1-3-1. Julia モード
###1-3-2. ヘルプモード
###1-3-3. シェルモード
###1-3-4. パッケージモード
###1-3-5. 履歴検索機能

##1-4. Juliaを JupyterLabで使用する
###1-4-1. JupyterLabおよび IJuliaのインストール
####IJuliaを利用して JupyterLabをインストールする
####JupyterLabを Pythonのパッケージマネージャからインストールする
####デスクトップアプリとしてインストールする
####Julia カーネルを追加する
###1-4-2. JupyterLabによる Juliaの実験
###1-4-3. 各種クラウドサービス(ノートブック環境)での Juliaの利用
####コラム. Pluto.jl

##1-5. Juliaをエディタで使用する
###1-5-1. Visual Studio Code (VSCode) と Julia プラグインの導入

#第2章 Juliaの基本文法

##2-1. リテラル
###2-1-1. 数値リテラル
####整数値
####浮動小数点数値
####有理数/複素数
###2-1-2. 文字リテラル/文字列リテラル
####文字
####文字列
###2-1-3. 正規表現リテラル
###2-1-4. 非標準文字列リテラル
###2-1-5. 範囲リテラル
###2-1-6. 配列リテラル
####ベクトル(1次元配列)
####行列(2次元配列)
####多次元配列(Julia v1.7以降)
####ベクトル・行列の結合
####多次元配列の結合(Julia v1.7以降)
###2-1-7. タプルリテラル/名前付きタプルリテラル
###2-1-8. その他のリテラル

##2-2. 変数/定数
####コラム. Juliaの定数は実は変更できる

##2-3. 演算子
###2-3-1. 算術演算子
####除算演算子
####冪乗演算子
###2-3-2. ビット演算子
###2-3-3. 論理演算子
###2-3-4. 文字列操作演算子
###2-3-5. 代入演算子
###2-3-6. 比較演算子
####同値演算子
####等価演算子
####包含演算子
####比較演算子の連鎖
###2-3-7. その他の演算子
###2-3-8. 演算子の優先順位
####コラム. 演算子に使用できる Unicode文字

##2-4. 関数
###2-4-1. 関数呼び出し
####関数呼び出しの基本
####キーワード引数
####引数展開
###2-4-2. 関数定義
####関数定義の基本
####無名関数
####関数の多重定義
####可変長引数
####オプショナル引数/キーワード引数
####型アノテーション
#### return文
###2-4-3. 関数適用演算子

##2-5. 制御構文
###2-5-1. 条件分岐
###2-5-2. 繰り返し
###2-5-3. 例外処理

##2-6. その他の構文
###2-6-1. 内包表記
###2-6-2. ドット構文
###2-6-3. Doブロック構文
###2-6-4. beginブロックと letブロック

##2-7. 型の基本
###2-7-1. プリミティブ型
####プリミティブ整数型
####プリミティブ浮動小数点数型
####その他の標準プリミティブ型
###2-7-2. 複合型
###2-7-3. コレクション型
####配列
####辞書
####集合
####タプル/名前付きタプル
###2-7-4. 文字列型
###2-7-5. 型アノテーション

##2-8. モジュール
###2-8-1. importと using
###2-8-2. 標準モジュールとモジュールのネスト
###2-8-3. モジュールの定義

【基本編】
#第3章 Juliaの標準ライブラリ関数

##3-1. 便利な標準関数たち
###3-1-1. 演算系(1) 除算・剰余算系
####整数除算関数
####整数剰余算関数
####整数除算・剰余算複合関数
####値域を指定した整数剰余算関数と整数除算関数
####整数除算・剰余算関数についての補足
####コラム. mod1()関数の使い途
####その他の除算・剰余算関連関数
###3-1-2. 演算系(2) 結合演算
####積和演算
####冪剰余演算
###3-1-3. 演算系(3) その他の演算系関数
###3-1-4. 数学系(1) 三角関数、指数関数、対数関数
###3-1-5. 数学系(2) その他の数学関数
###3-1-6. 文字列関連関数
####文字・文字列情報取得関数・演算子
####文字・文字列比較関数・演算子
####文字列操作関数・演算子
####文字列検索・置換関数
####Juliaの正規表現
####パターンに指定出来るもの
###3-1-7. 配列・集合演算
####コレクション情報取得関数・演算子
####配列関連関数・演算子(1) 配列生成関連
####配列関連関数・演算子(2) 配列加工・更新
####コラム. 破壊的操作
####配列関連関数・演算子(3) ベクトル・行列関連
####配列関連関数・演算子(4) デック(両端キュー)
####配列関連関数・演算子(5) 集計・畳み込み関連関数
####配列関連関数・演算子(6) 検索関連関数
####辞書関連関数
####集合関連関数・演算子
####タプル・名前付きタプル関連関数
###3-1-8. その他「あると便利」がある関数
###3-1-9. 演算子は関数

##3-2. 標準ライブラリ
###3-2-1. Printf
####コラム. @printfはなぜマクロ?
###3-2-2. Dates
###3-2-3. Statistics
###3-2-4. LinearAlgebra

##3-3. 関数・引数の組合せ
###3-3-1. 文字列→数値変換
###3-3-2. 数値の丸め処理
###3-3-3. all() / any()
###3-3-4. 引数にジェネレータ式を指定出来るその他の例

#第4章 型システム

##4-1. Juliaの型システムの概要

##4-2. 公称型システムとサブタイピング
###4-2-1. 公称型システム
###4-2-2. 基本型と派生型
###4-2-3. 型階層
####コラム. 参考:公称型ではない型システム
###4-2-4. 抽象型と具象型
###4-2-5. Any型

##4-3. パラメトリック型
###4-3-1. パラメトリック型
###4-3-2. 型パラメータに指定出来るもの
###4-3-3. パラメトリック型のサブタイピング
###4-3-4. UnionAll型
###4-3-5. パラメトリック抽象型

##4-4. 型制約
###4-4-1. 型制約とは
###4-4-2. 制約の種類
###4-4-3. 型制約とサブタイピング

##4-5. ユーザ定義型
###4-5-1. ユーザによる型の定義
###4-5-2. コンストラクタ定義

##4-6. 特殊な型
###4-6-1. Tuple型・NamedTuple型
###4-6-2. Union型
###4-6-3. ボトム型
###4-6-4. シングルトン型
###4-6-5. Type{T}型セレクタ
###4-6-6. 型エイリアス

#第5章 多重ディスパッチ

##5-1. 多重ディスパッチとは?

##5-2. 多重定義
###5-2-1. 関数の定義(おさらい)
###5-2-2. 型シグニチャ
###5-2-3. 実例
###5-2-4. メソッドの曖昧さの解決
####コラム. キーワード引数と多重ディスパッチ

##5-3. ポリモーフィズム
###5-3-1. Juliaのポリモーフィズム
####コラム. Juliaと部分型多相
###5-3-2. 実例

##5-4. 演算子オーバーロード
###5-4-1. 演算子オーバーロードも多重ディスパッチ
###5-4-2. 実例
###5-4-3. 型昇格ルール

##5-5. 糖衣構文
###5-5-1. 糖衣構文(の多く)も多重ディスパッチ
###5-5-2. 例
####例1. インデクシング関連
####例2. プロパティ
####例3. 後置演算子 '~

##5-6. Holy トレイト
###5-6-1. Holy トレイトとは?
###5-6-2. 実例: IndexStyle

##5-7. その他の実用例
###5-7-1. sort()のアルゴリズム指定
###5-7-2. Val{N}によるディスパッチ

#第6章 イテレーション

##6-1. Juliaのイテレーションの仕組み
###6-1-1. イテレーションも糖衣構文
###6-1-2. iterate()関数
###6-1-3. Base.IteratorSizeと Base.IteratorEltype
#### Base.IteratorSize
#### Base.IteratorEltype

##6-2. イテレーションプロトコルの実装
###6-2-1. サイズが決まっているパターン
####例1. 配列( AbstractArray )の派生型とする場合(推奨)
####例2. 配列( AbstractArray )の派生型としない場合
###6-2-2. 長さが不定のパターン
####例. コラッツの予想
####その他の例
###6-2-3. 無限列挙
####例. フィボナッチ数列

##6-3. Iteratorsサブモジュール
####コラム. Iterators.~のイテレータ型とそのトレイト実装

#第7章 ブロードキャスティング

##7-1. ブロードキャスティングとは?
###7-1-1. ドット構文(おさらい)
###7-1-2. ブロードキャスティング
###7-1-3. @.マクロ
###7-1-4. ブロードキャスティングの特徴

##7-2. ブロードキャスティングの実装
###7-2-1. ドット構文も糖衣構文
###7-2-2. ブロードキャスティングの仕組み
#### Broadcast.broadcasted()と Broadcast.materialize()
#### Broadcast.broadcastable()
#### Broadcast.BroadcastStyle

##7-3. ブロードキャスティングの適用
####実例(1) 配列の派生型
####実例(2) イテレーションプロトコルを実装した型
####コラム. もっと柔軟なブロードキャスティング計算適用へのヒント

#第8章 メタプログラミング

##8-1. 用語の説明・おさらい

##8-2. メタプログラミングとは?

##8-3. Expr型とシンボル
###8-3-1. AST
###8-3-2. Expr型
###8-3-3. シンボル
###8-3-4. QuoteNode

##8-4. 解析と評価
###8-4-1. Meta.parse()
###8-4-2. eval()
###8-4-3. 式展開
###8-4-4. コードの動的生成

##8-5. マクロ
###8-5-1. Juliaのマクロ呼び出し
###8-5-2. マクロの定義
###8-5-3. マクロの動作原理
###8-5-4. 衛生的なマクロ
###8-5-5. 実例
###8-5-6. 非標準文字列リテラルとコマンドリテラル

##8-6. 生成関数
###8-6-1. 生成関数 (Generated Function) とは
###8-6-2. 生成関数の特徴と注意点
###8-6-3. 実例

#第9章 並行・並列処理

##9-1. タスクとチャネル
###9-1-1. タスク
###9-1-2. 通知
###9-1-3. チャネル
###9-1-4. タスク・チャネル による並行処理
####コラム. ネット検索の例が並行動作する理由

##9-2. スレッド
###9-2-1. Juliaでスレッドを利用する
###9-2-2. スレッドの基本
#### Threads.@threadsマクロ
#### Threads.@spawnマクロ
#### Threads.@threadsと Threads.@spawnの使い分け
#### Channel(spawn=true)
#### Threads.foreach()
###9-2-3. 実用例
####ソートアルゴリズムの並列化
#### Iterators.mapのマルチスレッド化
###9-2-4. スレッドセーフ
#### Threads.@atomicマクロ(Julia v1.7以降のみ)
####ロック機構による排他制御(1)
####ロック機構による排他制御(2)
####コラム. デッドロック

##9-3. マルチプロセス
###9-3-1. Juliaのマルチプロセシング
###9-3-2. マルチプロセスの基本
#### @everywhere
#### remotecall()
#### pmap()
#### RemoteChannel
#### SharedArray
#### @distributed
####コラム. 分散処理

#第10章 パッケージマネージャ

##10-1. Juliaのパッケージマネージャ
###10-1-1. REPLのパッケージモード
###10-1-2. Project.toml / Manifest.toml
###10-1-3. Pkg標準ライブラリ
####コラム. Juliaのパッケージ管理の単位

##10-2. 基本的な使い方
####パッケージの追加・更新・削除
####パッケージの固定・固定解除、開発モード・開発モード解除
####その他のパッケージ関連コマンド
####パッケージレジストリ関連コマンド

##10-3. 環境の管理
###10-3-1. 環境(仮想環境)
###10-3-2. プロジェクト
###10-3-3. パッケージディレクトリ
###10-3-4. パッケージディレクトリの共有・公開

##10-4. パッケージ開発の基本
###10-4-1. PkgTemplates.jlによるパッケージディレクトリの生成
###10-4-2. 構成ディレクトリ・ファイルについての補足
####テストの追加
####パッケージのビルドフェーズの追加
###10-4-3. 公式パッケージ化のヒント
####コラム. JupyterLab上での操作

【実践編】
#第11章 数値計算

##11-1. Juliaで数値計算

##11-2. NLsolve.jlによる非線形方程式の求解

##11-3. DifferentialEquations.jlによる常微分方程式の数値的解法

##11-4. その他の外部パッケージ情報
####数値計算全般
####最適化関連
####微分方程式関連
####その他

#第12章 データ解析

##12-1. Juliaでデータ解析

##12-2. 基本的な道具の使い方
###12-2-1. 可視化(データプロット)の基本
####コラム. Plots.jlのレシピ機能

##12-2-2. データフレームの基本

##12-3. 実例:ネット上に公開されているデータの読み込みと簡単な解析

##12-4. 発展的な情報
####統計・データ解析全般
####データプロット関連
####データフレーム・データ操作関連

#13章 機械学習

##13-1. Juliaで機械学習

##13-2. MLJ.jl

##13-3. Flux.jl

##13-4. 発展的な情報
####機械学習全般
####深層学習(Deep Learning)関連
#### MLJ.jl関連
#### Flux.jl関連

著者情報

後藤 俊介
後藤俊介 有限会社来栖川電算所属のエンジニア。JuliaTokai、機械学習名古屋などのコミュニティ活動に携わり、Juliaについての情報を発信している。 Twitter ID:@antimon2
後藤, 俊介
後藤俊介
後藤俊介 有限会社来栖川電算所属のエンジニア。JuliaTokai、機械学習名古屋などのコミュニティ活動に携わり、Juliaについての情報を発信している。 Twitter ID:@antimon2