Colab で学ぶ LaTeX

はじめに

はてなでも、Qiita でもマークダウンできれいな数式が書けます。

$$ E=mc^{2} $$

とか。

この数式を書く記法を LaTex と言って、本来は数学書を書くための組版処理システムなのですが、数式を書く部分が LaTeX のサブセットの MathJax として ブログや Html で使われている。

これをさくっと学ぶための Colab のノートブックを作りました。

https://colab.research.google.com/github/kalz2q/mycolabnotebooks/blob/master/learnlatex.ipynb

細かいことにこだわらないでざっと読むなら 3 時間位で読めると思う。

Colab なのでいろいろいじって実験学習すると、自由自在に数式が書けるようになります。 今回は行列やマクロも入っています。

使い方

  1. 上記の URL をクリックして、資料を Colab で開く
  2. メニューの「ドライブにコピー」で自分の Colab にコピーする
  3. セルを編集したり、壊したりしながら実験学習する

メリット・ディメリット

  1. だれでも使える。環境設定が不要
  2. 失敗を恐れずインタラクティブに学習できる
  3. 壊したらもとのファイルからやりなおせばよい

以上

Colab で学ぶ Sympy

はじめに

数学を学ぶためになんらかの数式処理システムは必須だろうと思う。

この Colab のノートブックは Sympy という数式処理システムの学習資料です。

https://colab.research.google.com/github/kalz2q/mycolabnotebooks/blob/master/math_sympy_short.ipynb

さくさく進めれば 1 時間くらいで Sympy が使えるようになる(かもしれない)。 数式処理、方程式、微積分、グラフ描画をカバーしています。線形代数とかは別に作る予定です。

使い方

  1. 上記の URL をクリックして、資料を Colab で開く
  2. メニューの「ドライブにコピー」で自分の Colab にコピーする
  3. セルを実行したり、壊したりしながら実験学習する

メリット・ディメリット

  1. だれでも使える。環境設定が不要
  2. 失敗を恐れずインタラクティブに学習できる
  3. 壊したらもとのファイルからやりなおせばよい

以上

Colab (Jupyter) エディター内キーボードショートカット

Colab (Jupyter) でコードセルやテキストセルを編集中に使えるキーボードショートカットの機能についてまとめようと思いました。

メニュー -> ツール -> キーボードショートカット (Ctrol+M H) で出てくる一覧に例えば Ctrl+C (コピー) や Ctrl+Click (マルチカーソル) が入っていません。

たぶんごく自然につかえるのでヘルプとして提供するニーズがない。 ショートカットに 2 種類あるのを一度に示すと混乱する。 というような理由で入っていないと思う。 それはそれでいいのですが、マルチカーソルが使えることなどはちょっと思いつかないかもしれない。

ショートカット 機能 備考
Double/Triple-Click 行選択 英語だと単語/行選択の区別がある
Ctrl+C コピー 選択テキストをクリップボードにコピーする
Ctrl+V ペースト クリップボードをカーソル位置にペーストする
Ctrl+A 全選択 編集中のセルの全テキストを選択
Shift+Click 選択範囲拡大 カーソルの位置からクリック位置まで選択
Home 行先頭 カーソルのある行の行頭にカーソルを移動
End 行末 カーソルのある行の末尾にカーソルを移動
Ctrl+Home セル頭 編集中のセルの先頭にカーソルを移動
Ctrol+End セル末 編集中のセルの末尾にカーソルを移動
Ctrl+Click マルチカーソル カーソルを複数の場所において一度に編集
Ctrl+Shift+Alt+Up/Down マルチカーソル Home/End で行頭行末。超便利!!!!
Ctrl+D 選択テキストを複数選択 そのままマルチカーソルになる
Ctrl+Shift+P 選択テキストをすべて選択 そのままマルチカーソルになる

樹木の名前の略称一覧

略称 樹木名
BW ビワ
AC アカシア
AG アオギリ
AN アキニレ
BN ブナ
CF コーヒー
EG エゴノキ
EJ エンジュ
EN エノキ
FA フサアカシア
HG ヒイラギ
HM ハナミズキ
HN ハンノキ、ハルニレ、ハナノキ
HN ヒノキ
HR ヒメリンゴ
HS ヒマラヤスギ
IM イロハモミジ
IT イチョウ
KB コブシ
KI カイズカイブキ
KK カキ
KM クロガネモチ、クロマツ
KN コナラ
KR カリン
KS クスノキ、カシ
KW クワ
KY ケヤキ
MC モチノキ
MK マキ
MM モミジ、モミ
MN ミカン、ミズナラ
MS マテバシイ
MT マツ、モチノキ、モッコク
MZ ミモザ
NH ナンキンハゼ
NM ネズミモチ
NM ネムノキ
NR ニレ、ノムラモミジ、ナラ
NT ナツツバキ
RG リンゴ
SD シダレザクラ
SG スギ、ソヨゴ
SI シイノキ
SK サクラ
SN サンゴジュ
SR シラカシ
SS サルスベリ
SY ソメイヨシノ
SY シュロ
SZ サザンカ
TB タブノキ、ツバキ
TK トウカエデ
TR タラノキ
TT トチノキ
UB ウバメガシ
UM ウメ
YB ヤマボウシ
YM ヤマモモ
YR ユリノキ
YU ユズ
YZ ユズリハ

Colab の matplotlib で日本語を使う (使わない)

はじめに

Colab 自体は日本語はもちろんオーケーなのですが、 matplotlib のテキストなどで日本語を使おうとするとエラーになります。

コードセルを1つ別に開いて、次のようにしてから import japanize_matplotlib して使えるようになりました。

%%capture
!pip install japanize_matplotlib

解説

ここで %%capture はセルマジックで出力の抑制。

pip の前のエクスクラメーションマークはコードセル内で Unix のコマンドを使うためのおまじない。

結果

import matplotlib.pyplot as plt
import japanize_matplotlib
plt.text(0.5, 0.5, 'matplotlibで\n日本語が\n使える!!!!'
    , fontsize=40
    , horizontalalignment='center'
    , verticalalignment='center')
plt.axis('off')
plt.savefig("temp.svg", format="svg")
plt.show()

意見

ちなみに、 matplotlib 内で日本語を使わなければならないことはないので、使わないのが一番だと思います。

Colabで遊ぶ scatter で random に点を打つ

Colab で遊ぶシリーズ

scatter で random に点を打つ。 カラーも random

できれば Colab で開いて実行してみてください

https://colab.research.google.com/github/kalz2q/mycolabnotebooks/blob/master/z_scattercolor.ipynb

# scatter で random に点を打つ。 色も random
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots() 

data = {'a': np.random.randn(50),
        'b': np.random.randn(50),
        'c': [np.random.random(3) for i in range(50)],
        'd': np.abs(np.random.randn(50)*700)}
ax.scatter('a', 'b', c='c', s='d', data=data)
ax.set_axis_off()
plt.savefig("test.svg", format="svg")
plt.show()

解説

乱数発生の random は numpy の random を使っている。 いろいろあって便利です。

randn は正規分布の乱数で標準偏差 1 の乱数を発生する。 できあがった画像がなんとなく中心よりで収まりがいいのはそのせいです。 引数は必要な個数で、返り値は ndarray です。 何も入れないと配列ではなく float が返される。 今回は x, y に 50 個の配列を使います。

random は 0 と 1 の間のフラットな乱数を返す。 色はこれで選んでいます。 RGB にするために引数に 3 を指定して、それを 50 回繰返して配列に入れている。 配列にするのに list comprehension 内包表記を使っている。

点のサイズは乱数の配列を700倍している。 ndarray は数値を足したり掛けたりすると入れるの要素に足されたり掛けられたりするので便利。 そうでないと map を使うことになるのかな。 今回使わなかったので考えていません。

今回は画像を楽しむためのものなので座標の目盛りは不要なので消している。

ax.set_axis_off()

これもしばらく前に探して見つけたものです。

plt.savefig("test.svg", format="svg")

はてなの記事にするために画像を svg に書き出しています。

イプシロンデルタ論法

latex で論理式、論理記号文を書いていて、テキストによって括弧 (丸括弧 parenthesis、角括弧 bracket、波括弧 braces) の使い方に揺れがあったりして、あとカンマの使い方、どういう場合に省略するのか。 と考えていてイプシロンデルタ論法の数式で比べよう、と思いつきました。

日本の離散数学などのテキストでは次のような表示になっている。

$\forall\varepsilon \gt 0 \;\;\exists\delta \gt 0 \;\; \forall x \in \mathbf R \;\;(0 \lt |x - a| \lt \delta\implies |f(x) - f(a)| \lt \varepsilon)$

日本語のウィキペディアでは次のような表示になっていた。

${}^{\forall} \varepsilon \gt 0,\;^{\exists} \delta \gt 0 ;\;^{\forall} x \in \mathbf R\;[0 \lt |x - a| \lt \delta\implies |f(x) - f(a)| \lt \varepsilon]$

英語では epsilon-delta definition of limit と言うそうです。

英語のウィキペディアでは次のような表示になっていた。

$\forall\varepsilon \gt 0,\;\exists\delta \gt 0 ;\;\forall x \in \mathbf R,\;0 \lt |x - a| \lt \delta\implies |f(x) - f(a)| \lt \varepsilon$

たぶんどれも正しいのだとして、自分の好みとわかりやすさでは日本のテキストの表示がよいと思う。 カンマやセミコロンは意味があって、明確に区別できるのかもしれないが、カンマやセミコロンは論理記号文以外でも使われるので、いずれにしても文脈で確認しなくてはいけないので、それならばスペースがよい。 命題を角括弧 bracket で囲むのは話としてはわかるが通常の丸括弧 parenthesis で十分だと思う。 その証拠に英語のウィキペディアでは囲ってもいない。 囲まないルールはわかりにくくなると思うのでなんらかの方法で囲った方がよいと思う。

あと、全称記号 $\forall$ と 存在記号 $\exists$ を小さく前上付きにするのはみんなが同じルールならばわかりやすいとは思うが揺れがあるのだったら普通の大きさで変数の前につけて問題ないと思う。

ここで書いた、latex でのソースは以下の通り。 スペース \;は見やすさのために適宜加えている。

 

日本ののテキスト

$\forall\varepsilon \gt 0 \;\;\exists\delta \gt 0 \;\; \forall x \in \mathbf R \;\;(0 \lt |x - a| \lt \delta\implies |f(x) - f(a)| \lt \varepsilon)$

日本語のウィキペディア

${}^{\forall} \varepsilon \gt 0,\;^{\exists} \delta \gt 0 ;\;^{\forall} x \in \mathbf R\;[0 \lt |x - a| \lt \delta\implies |f(x) - f(a)| \lt \varepsilon]$

英語のウィキペディア

$\forall\varepsilon \gt 0,\;\exists\delta \gt 0 ;\;\forall x \in 
\mathbf R,\;0 \lt |x - a| \lt \delta\implies |f(x) - f(a)| \lt \varepsilon$

 

ちなみに、文の意味は「$f(x)$ の $a$ における極限は $f(a)$ である」ということです。

$\displaystyle \lim_{x \to a} f(x) = f(a)$