Anacondaで仮想環境構築メモ
Anacondaで仮想環境をよく作るので、環境にまつわるコマンドなどのメモ。
仮想環境の確認方法
下記二通りの記述方法がある。
conda env list conda info -e
仮想環境の新規作成
下記の様な形で仮想環境の新規作成を行える。
conda create -p <作成先ディレクトリ> <インストールモジュール>
この例はtensorflowの実行環境を準備した時のもの。
conda create -p ~/anaconda/envs/tensorflow anaconda
仮想環境の実行&終了
下記コマンドで仮想環境の実行が可能。
source activate <仮想環境名>
下記コマンドで仮想環境を終了することが可能。
ただし、仮想環境実行中のみ有効となる。
source deactivate
数を足し合わせる際の情報落ちへの対処法
大量の数を足し合わせる際に情報落ちをしてしまう問題への対処法メモ。
少数の数の足し合わせであれば情報落ちも無視していいレベルの場合もあるが、大量の数を足し合わせる際には無視できない数となる。また、expスケールなどの大きな数を取り扱うに当たっても注意が必要である。
logスケール変換
大量の数の下記のような和を考える。
このまま計算してしまうと情報落ちが発生してしまうため、各をスケールに変換して和の計算を行う。
ただし、としている。
ここで、第一項は最大値をそのまま計算した値となり、第二項におけるの計算は指数部分が全て負の値となり、情報落ちを抑えて計算することができる。
Pythonコード
この計算を計算するPythonのfunctionを下記のように作成した。
def log_sum(l_log): '''calculate sum of log''' max_log = max(l_log) l_log_minus = l_log - max_log out_value = max_log + np.log(np.sum(np.exp(l_log2_minus))) return out_value
Pythonで他階層にあるモジュールのimport
Pythonで他の階層にあるモジュールをimportする時のメモ。
PythonではPythonファイルを実行する際に、そのファイルが置いてあるディレクトリをルートとして扱ってしまうという仕様があるみたいで、上位の階層や、隣のディレクトリにあるファイルを簡単にimportすることができない。この問題にはよく遭遇するのでその時の解決方法を残しておく。
階層構造
例えば、階層構造として下記のようなディレクトリ構成になっていることを考える。Pythonファイル"aaa.py"から、"bbb.py"をimportしたいケースを考える。
[any directory]/ ┣ AAA/ ┃ ┗ aaa.py : **現在実行しているPythonファイル** ┗ BBB/ ┗ bbb.py : **importしたいPythonファイル**
__init__.pyの配置
モジュールとして認識させるため、それぞれのディレクトリに"__init__.py"を配置する。中身は空で構わない。その時のディレクトリ構成は下記となる。
[any directory]/ ┣ AAA/ ┃ ┣ __init__.py : **initファイルを追加** ┃ ┗ aaa.py : **現在実行しているPythonファイル** ┗ BBB/ ┣ __init__.py : **initファイルを追加** ┗ bbb.py : **importしたいPythonファイル**
Pythonコード
osモジュールを利用して現在のディレクトリを取得し、上位のパスをsysモジュールを用いてpathリストにappendする。そうすることで、一つ上位の階層をpathに加えることができるので、"bbb.py"をimportすることができる。
aaa.pyの中身
import os import sys path = os.path.join(os.path.dirname(__file__), '../') sys.path.append(path) import BBB.bbb
MacでTex環境の構築&自動化メモ
Macの環境
MacBook Pro (Retina 13-inch、Early 2015) OS X EI Capitan バージョン10.11.6
Texのダウンロード&インストール
MacTexを下記サイトからダウンロードしてインストールした。
MacTeX - TeX Users Group
Texファイルのコンパイル
TexファイルをAtomでコンパイルしようとしたところ、デフォルトが"Latex"でのコンパイルとなっていたため、 日本語ファイルがコンパイルできなかった。Atomに入れたTex関連のパッケージは下記。
この環境だと、pLatexのコンパイルができず。。。
色々調べて、Atomの上記パッケージのjsを修正すればpLatexの実行ができるというような記事を見つけて色々試したが、断念。
ターミナルからコンパイルすることにする。
ターミナルからのコンパイル方法
ターミナルからpLatexでのコンパイルを実行する方法は下記となる。大まかには、pLatexでのコンパイル→pbibtexのコンパイル→pLatexでのコンパイル(2回、citationをつけるため)、DVIからPDFへの変換、となる。
cd [target directory] platex -output-directory=[target output directory] [target file] pbibtex [target file] platex -output-directory=[target output directory] [target file] platex -output-directory=[target output directory] [target file] dvipdfmx -o [target pdf file] [target dvi file]
例)"testLatex.tex"からPDFを作成する。
cd /Users/~~/sampleLatex platex -output-directory=./out testLatex pbibtex ./out/testLatex platex -output-directory=./out testLatex platex -output-directory=./out testLatex dvipdfmx -o ./testLatex.pdf ./testLatex.dvi
コンパイルの自動化
毎回上記のようなターミナル実行を行うことが面倒だったので、Pythonで自動化するコードを作成した。コードはGitHubにあげているため、そちらを参照。
実行方法
このコードの実行方法は下記となる。
まずディレクトリ構成を下記のように作成し、対象のPythonファイル、Texファイルを配置する。
[any directory]/ ┣ compileTex/ ┃ ┗ compile_pLatex.py : **自動化用のPythonファイル** ┗ sampleLatex/ ┣ out/ ┃ ┗ testLatex.pdf : **このディレクトリに最終アウトプットのPDFが出力される** ┗ testLatex.tex : **PDFを作成したいtexファイル**
その後、下記コマンドを実行することで、PDF作成までのコマンドを全て実行するようにしている。
python compile_platex.py -d [target_directory] -f [target_file] -o [target_output_directory]
オプション引数の意味:
例えば、ディレクトリ構成を上記と同じような形にすると、コマンドは下記となる。
python compile_pLatex.py -d sampleLatex -f testLatex