ユーザ用ツール

サイト用ツール


サイドバー

Menu


プログラム:python

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
プログラム/python.txt · 最終更新: 2025/08/14 09:23 by kawaue