=====python忘備録===== ====install (MacOS)==== ===brew install (非推奨)=== $ brew install python3 で最新のpythonが入る。 $ python3 --version Python 3.9.13 pythonはよく複数のバージョンを使いたくなることがあるので、以下のパッケージ管理ソフトを利用して複数の仮想環境を作成することが多い。 ===MiniForge=== Pythonのパッケージ管理ソフトにはpip, pipenv, pyenv, anacondaなどたくさんある。M1チップの場合はMiniForgeを使うとよいらしい。\\ MiniForgeのインストール $ wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh $ bash Miniforge3-MacOSX-arm64.sh 色々聞かれるので、yes (or Enter)で良い。\\ 仮想環境の構築+アクティベーション $ conda create --name hogeenv python=3.8 $ conda activate hogeenv これでpython3.8の仮想環境''hogeenv''ができた。 $ conda deactivate で仮想環境を終了。\\ デフォルトで''base''という環境がactiveになるので conda config --set auto_activate_base False で無効化できる。作った仮想環境のリストは conda env list で見ることができる。 ===Jupyter Notebook=== 仮想環境をアクティベートした状態で以下のコマンドで起動。 $ conda install jupyter $ jupyter notebook Notebook上でのモジュールのインストールの仕方。\\ !pip install module importできない時はpathの確認 !pip show module をして、追加\\ import sys sys.path.append('path') 便利なコマンド\\ cellをdeactivate : esc + r\\ cellをactivate : esc + y ====文法==== ===スコープ=== indentの位置でスコープが決まる(?)。\\ コメントであってもindentの位置を変えることは許されない。(),[],{}内は改行が許されている。 ===宣言=== 変数の宣言時に型の指定は不要(?)。 函数の引数にも不要(?)。 注:組み込み関数を上書きしようとしても何もエラーを吐かず、そのまま上書きする(?)。\\ 例:print = 0などとしてしまうと、何もエラーを吐かずprintが関数でなくintになり、print()がエラーを吐くようになる。\\ 対処法:del printでリセット可能。 ===文字列=== ''と""どちらも可(!?) 変数を文字列にして出力 print("Process %s type %d : progress %.3f %%"%(hoge,huga,piyo)) %s : 文字, %d : 整数, %.3f : float3桁まで表示。 %% : %のエスケープ ===ライブラリの読み込み方=== カレントディレクトリのhoge.pyを読み込むとき import hoge この時、hoge.pyは実行される。ライブラリの場合は定義のみ書いてある(コマンドの実行を含まない)ことも多い。 *特別な変数__name__について。\\ hoge.pyがpython3コマンドによって直接実行された場合、__name__=__main__となる。importによって呼び出されて実行された場合は__name__=__hoge__となる。これを利用して、直接実行されたときにしか実行されない部分を用意できる。 if __name__ == '__main__': #ファイルを直接実行したときTrue main() hoge.pyのクラスHogeを呼びたい場合は from hoge import Hoge ===関数=== 以下のように宣言する。返り値を複数設定可能で、配列で渡される。 def hoge(huga,piyo): foo = huga + piyo bar = huga - piyo return foo, piyo 配列の各要素に関数を作用させたいとき\\ 例:shapeが(1000,2)のnumpy.array num_arrayの二つ目の軸の要素の和と差のnumpu.arrayを作りたい new_array = np.apply_along_axis(lambda element: hoge(*element), 1, num_array) lambda : ラムダ式。ここでだけ使う関数を宣言できる。 ===クラス=== class Hoge(Fuga): #Fugaを継承したHogeクラス def __init__(self): #__init__はコンストラクタ super().__init__() #Fugaのコンストラクタが呼ばれる self.hoge = 0 #メンバ変数hogeはここで定義される def __init__(self, piyo): #引数違いのコンストラクタ super().__init__() self.hoge = piyo def hogehoge(self, foo, bar): ...... 以下のインデントが揃っている部分がそのクラスの定義。()を付けるとクラスを継承できる(省略可)。 クラスの中で変数や函数を定義するとそのメンバになる。 コンストラクタの中で(self.hogeの形で)宣言した変数はメンバ変数になる。 classの函数は第一引数に''self''を必ず持たなくてはならない。メンバ変数hogeを呼ぶときはself.hogeの形で呼ぶ。 コンストラクタは__init__()、デストラクタは__del__()。引数が違うコンストラクタを複数定義できる。 super().で継承前のクラスのメンバを呼び出せる。 ===コメントアウト=== 一行は先頭に#を置く。複数行は''"""''(ダブルクオート三つ)で囲む。 ===for文=== for i in range(0,nstep,1) : ### for文の中身 ### ''range(start,stop,step)''は$\mathrm{start}\leqq i<\mathrm{stop}$の間で''step''ずつカウンターを増やす。 ===組み込み関数など=== type() : 型を表示する。 ====デバッグ==== pdbモジュールを使うとよい。 import pdb pdb.set_trace()した行からデバッグが始まる。 ^コマンド^説明^ |l|コード確認| |s|現在の行を実行。次の関数の前で止まる| |p var|変数varの中身を確認| ====Numpy==== 数値の操作をするためのpythonのモジュール ===array=== Numpyの配列は2次元から。つまり、一次元配列には"縦"と"横"がある。 ^関数^説明^ |.shape|配列(テンソル)の形状を確認できる| |.flatten()|"横"1次元配列になる| |.concatenate() | 既存の次元に対して結合| |.stack() | 新たな次元を作って結合| ===hist=== a,b,c=hist a=value of each bin, b=bin ====2軸plot==== run_index = 0 fig, ax1 = plt.subplots() ax2 = ax1.twinx() ax2.plot(histories2[run_index].history['lr'],label='learning rate',linestyle='--',color='green') ax1.plot(histories2[run_index].history['loss'],label='training loss') ax1.plot(histories2[run_index].history['val_loss'],label='validation loss') plt.title('1st iteration, step 1, batch : 8192 lr : 1e-6, 1st trials') ax1.set_xlabel('epoch') ax1.set_ylabel('Loss') ax2.set_ylabel('Learning Rate') handler1, label1 = ax1.get_legend_handles_labels() handler2, label2 = ax2.get_legend_handles_labels() ax1.legend(handler1 + handler2, label1 + label2) #plt.legend() plt.figure() ====機械学習==== ===tensorflow=== 機械学習のためのモジュール。 installの手順 $ wget https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha2/tensorflow_macos-0.1alpha2.tar.gz $ tar xvzf tensorflow_macos-0.1alpha2.tar.gz $ env="$HOME/miniforge3/envs/python38" $ libs="$PWD/tensorflow_macos/arm64/" $ pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/grpcio-1.33.2-cp38-cp38-macosx_11_0_arm64.whl" $ pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/h5py-2.10.0-cp38-cp38-macosx_11_0_arm64.whl" $ pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/tensorflow_addons_macos-0.1a2-cp38-cp38-macosx_11_0_arm64.whl" $ conda install -c conda-forge -y absl-py $ conda install -c conda-forge -y astunparse $ conda install -c conda-forge -y gast $ conda install -c conda-forge -y opt_einsum $ conda install -c conda-forge -y termcolor $ conda install -c conda-forge -y typing_extensions $ conda install -c conda-forge -y wheel $ conda install -c conda-forge -y typeguard $ pip install wrapt flatbuffers tensorflow_estimator google_pasta keras_preprocessing protobuf $ pip install tensorboard $ pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/tensorflow_macos-0.1a2-cp38-cp38-macosx_11_0_arm64.whl" バージョンが確認できれば成功 $ python >>> import tensorflow as tf >>> tf.__version__ '2.4.0-rc0' ====Condaの使い方==== 環境の複製 conda create --name new_environment_name --clone existing_environment_name 環境の削除 conda env remove --name myenv