実践Julia入門

[表紙]実践Julia入門

紙版発売
電子版発売

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で確認することができます。

本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。

サンプル画像1

サンプル画像2

サンプル画像3

サンプル画像4

サンプル画像5

目次

【入門編】

第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