Python

独立は複数の計算は並列化をするべき。
一部だけを計算する関数subcalを作ってmultiprocessingを使えばいい。import multiprocessing as mpでpool=mp.pool(processor数)、p.map(subcal, range(# of processor))。
テキトーにやっても並列してないときに137秒かかった計算が、6並列で55秒、12並列だと27秒で終わる。全プロセッサ使うと他が動かなくなるので注意しないといけない(それはそう)。

ipythonで実行すると、何をやったか忘れがち。これは、 %notebook -e test.ipynb を実行して.ipynb形式で保存しておけばいい。
当たり前だが、プログラムを走らせただけの場合はrun .../run .../run .../しかでてこない。

numpy リンク集

NumPy配列ndarrayを結合
NumPyのsortとargsort関数で任意の行・列を基準にソート
NumPy配列ndarrayに要素・行・列を挿入、追加するinsertの使い方
ndarrayの形状を変化させる。
cmapのパラメータ一覧

matplotlib

不規則間隔データ(x,y,z)からカラーコントアーを作成したい。この方法は基本的に三角形で等高線を考えて全部くっつけるみたいなことをしているはず。
plt.tricontourf(np.log10(cont_Mdot*yr_const/Msun_const),np.log10(cont_L),cont_e,levels=100,cmap=cm.viridis)
plt.colorbar()
規則的なデータなら次で良い
plt.contourf(xs, xs, z,vmin=-10,vmax=10), vmin,vmaxはzの上限と下限を決めてる。

色を塗る
fill_between(x,y1,y2),横方向はfill_betweenx(y,x1,x2)

メモリの文字のサイズ
plt.tick_params(labelsize=13)

軸のメモリを指数表記にする。
import matplotlib.ticker as ptick
しておいて、
ax.yaxis.set_major_formatter(ptick.ScalarFormatter(useMathText=True))
と軸に対して行う。

カラーバーの設定
cbar=plt.colorbar()
cbar.set_label(r"e",fontsize=15)
cbar.ax.tick_params(labelsize=15)

 例の設定
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0, fontsize=18,title="hoge").get_titlre().set_fontsize(18titlefontsize)
‘best’,‘upper right’‘upper left’‘lower left’‘lower right’‘right’‘center left’‘center right’‘lower center’‘upper center’‘center’

二軸グラフ
ax1 = fig.add_subplot(1, 1, 1)
ax2 = ax1.twinx()
みたいに軸を定義して、ax1.plt(X,Y),ax2.plt(X,Y)みたくすればいい。
最後にplt.showっで表示参考サイト

塗り潰し
plt.fill_betweenx(np.log10(L_sph_large),np.log10(Mdot_sph_large*yr_const/Msun_const),np.log10(Mdot_white_migi*yr_const/Msun_const),facecolor='white') plt.fill_between(np.log10(each_e_0[0]*yr_const/Msun_const),np.log10(each_e_0[1]),np.log10(L_white_ue),facecolor='white') plt.fill_between(np.log10(each_e_095[0]*yr_const/Msun_const),np.log10(each_e_095[1]),np.log10(L_white_shita),facecolor='white')


リモートで計算結果を保存したい場合、普通にやるとDISPLAYが設定されていないのでエラーになる。
これを避けるには pyplotをインポートする前にmatplotlibのbackendを指定しないといけない。
import matplotlib as mpl
mpl.use('pdf')
import matplotlib.pyplot as plt

目盛りをいい感じにする
plt.subplots_adjust(left=0.15,right=0.99,bottom=0.15,top=0.99) #これは余白をいい感じにする部分
import matplotlib.ticker as ptick
ax.xaxis.set_major_formatter(ptick.ScalarFormatter(useMathText=True)) # こっちを先に書くこと。
ax.ticklabel_format(style="sci", axis="x", scilimits=(6,6)) # 10^3単位の指数で表示する。 ax.xaxis.offsetText.set_fontsize(25)

3dの球面にカラーマップを表示
fig=plt.figure(figsize=(10,8)) ax=fig.add_subplot(projection='3d') ax.quiver(0,0,0,Vnow[0],Vnow[1],Vnow[2],color='black',arrow_length_ratio=0.1,length=1.5,label="x2",linewidth=3)#これはベクトルを表示する部分 surf=ax.plot_surface(xpr, ypr, zpr, rstride=1, cstride=1, facecolors=cm.jet(N/Nmax), linewidth=0, antialiased=False, shade=False,alpha=1,zorder=0) #N/Nmaxの色を、(xpr,ypr,zpr)という点に塗る。 ax.view_init(20,45) plt.tick_params(labelsize=20) plt.legend(fontsize=17) plt.tick_params(labelsize=17) m = cm.ScalarMappable(cmap=cm.jet) cb.ax.tick_params(labelsize=17) cb.ax.tick_params(labelsize='large') plt.subplots_adjust(left=0.01,right=0.99,bottom=0.01,top=0.99) plt.show(block=False)

gif作る時に参考にしたサイト。
ガス その2 その3

初期設定


	  
	  wget https://repo.anaconda.com/archive/Anaconda3-version-Linux-x86_64.sh
	  bash Anaconda3-version-Linux-x86_64.sh
	  versionはサイトで確認
	  eval "$(/home/tomoki/anaconda3/bin/conda shell.bash hook)"

	  conda init (起動時有効化)
	  conda config --set auto_activate_base false (上を無効にする、こっちの方が使いやすい)
	  
	  conda create -n 環境名 python=バージョン
	  conda install numpy scipy pandas matplotlib seaborn jupyterlab
	  conda install -c conda-forge jupyterlab
	  conda install pip
	  
	  Anacondaを毎回手動で有効化したい場合、ターミナル起動後に以下を実行します:
	  eval "$(/home/tomoki/anaconda3/bin/conda shell.YOUR_SHELL_NAME hook)"
	  conda activate bash

	  conda info -e
	  で現在ある環境を確認する。
      

sshでJupyter Labリモート利用手順

ローカルPCからSSH接続したリモートサーバーで、Jupyter Labを安全かつ途切れずに利用するための手順

1. リモートサーバー側の準備

1-1. Jupyter Labのインストール

リモートサーバーにログインし、Jupyter Labをインストールする。

pip install jupyterlab

1-2. パスワードの設定(セキュリティ強化):これはやってみたがうまくいかず、PCのパスワードでログインすることになった

アクセス時に使用するパスワードを**ハッシュ化**し、設定ファイルに書き込むの。**argon2:から始まる全て**をコピーして使うわよ!

  1. パスワードのハッシュ値を取得し、**すべて**コピーするわ。
  2. python -c "from jupyter_server.auth import passwd; print(passwd())"
  3. 設定ファイル ~/.jupyter/jupyter_lab_config.py を生成・編集するわ。
  4. jupyter-lab --generate-config
  5. ファイルを開き、以下の項目を設定し、ハッシュ値を貼り付けるの。
  6. 	  c.ServerApp.ip = 'localhost'
    	  c.ServerApp.open_browser = False
    	  c.ServerApp.port = 8888  # 任意のポート番号
    	  c.ServerApp.password = 'argon2:$argon2id$... (コピーしたハッシュ値)'
            

2. 計算継続のための準備 (Screen)

**SSH接続が切れてもプロセスを維持**するために、ScreenやTmuxを使う。
SSH接続を切ってもscreenが生きていればプロセスは残っている。ただし、notebookで実行している計算は止まる。帰宅途中の結果を家に帰って見るみたいなのはできない。

2-1. 仮想セッションの開始

リモートサーバーで、Jupyter Labを起動するためのセッションを開始するわ。

# Tmuxを使用する場合 (推奨)
	tmux new -s jupyter_session

	# Screenを使用する場合
	screen -S jupyter_session

2-2. Jupyter Labの起動

仮想セッション内でJupyter Labを起動するわ。

jupyter-lab --no-browser --port=8888

2-3. セッションからの離脱(デタッチ)

Jupyter Labが起動したら、以下のキー操作でセッションを維持したままターミナルから離脱よ。

これでSSH接続を切っても、Jupyter Labは動き続けるわ。

3. ローカルPCからのアクセス(ポートフォワーディング)

3-1. SSH接続とポートフォワーディング

ローカルPCのターミナルで、ポートフォワーディングを有効にしてリモートサーバーに接続するのよ。

ssh -L 8888:localhost:8888 user_name@remote_server.com

3-2. ブラウザからアクセス

SSH接続が確立している状態で、ローカルPCのブラウザで以下のURLにアクセスしてね。

http://localhost:8888/

設定したパスワードを入力すれば、リモートのJupyter Labが使えるわ。

3-3. 仮想セッションへの再接続

起動中のJupyter Labの画面をターミナルで操作したい場合は、再度SSHでログインし、セッションに再接続するのよ。

# Tmuxの場合
	tmux attach-session -t jupyter_session