実践Julia入門
2023年3月15日紙版発売
2023年3月15日電子版発売
後藤俊介 著
B5変形判/656ページ
定価3,960円(本体3,600円+税10%)
ISBN 978-4-297-13350-4
書籍の概要
この本の概要
2018年に正式安定版ver.1.0がリリースされて以降,数値計算分野などで注目を集めている言語・Juliaの本格的な入門書です。本書では言語仕様や基本機能の解説に重きを置きながら,実践的な実用例まで解説します。
本書は「入門編」「基本編」「実践編」の3部からなります。「入門編」では,開発環境のセットアップからはじめ,基本的な文法を解説します。「基本編」ではより詳細な解説に踏み入り,Julia特有の仕様や概念,固有の機能などを理解してもらいます。そして「実践編」では数値計算,データ解析,機械学習を取り上げ,より具体的・実用的な実践に発展します。
はじめてJuliaを使うという人から,今まで以上に深く知りたいという人まで,Juliaの魅力が詰まった一冊です。
こんな方におすすめ
- Juliaに興味がある人
- Juliaをもっと使いこなしたい人
この書籍に関連する記事があります!
本書のサンプル
本書の一部ページを,PDFで確認することができます。
- サンプルPDFファイル(2,070KB)
本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。
目次
【入門編】
第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関連
この本に関連する書籍
-
Juliaではじめる数値計算入門
Juliaは,2018年にver.1.0がリリースされて以降,速さと書きやすさで,特に数値計算分野で注目を集めている言語です。 本書ではそれぞれの数値計算問題に対し,さまざ...
-
Pythonで理解する微分積分の基礎
近年注目を浴びる人工知能は微分をはじめとした数学の計算に基づいています。また,新型コロナウィルス感染の予測では微分方程式が利用されています。微分積分は,多く...
-
RとPythonで学ぶ[実践的]データサイエンス&機械学習【増補改訂版】
本書は野村総合研究所のシステムコンサルティング事業本部で実施している「アナリティクス研修」をベースにした増補改訂版で,「統計的なモデリングとは何か?」「モデ...
-
Pythonで理解する統計解析の基礎
膨大なデータを扱うときに基本となる知識が統計解析です。本書はこれから統計解析を学びたいと考える方に向けて,プログラミングの力を借りて実際にデータを確認するこ...