matplotlibのholdについて

python + matplotlibでグラフを重ねる際、hold(True)を使っていると次のような警告が出る

 

Warning (from warnings module):
File "C:\Program Files\Python36\lib\site-packages\matplotlib\rcsetup.py", line 156
mplDeprecation)
MatplotlibDeprecationWarning: axes.hold is deprecated, will be removed in 3.0

 

警告なので別に動く

最新のversionではhold(True)をせずとも、holdが最初から機能している。

むしろ別々のグラフにしたいのであれば、cla()を使い、明示的にグラフを白紙に戻す必要がある。

らしい。

 

matplotlib.org

 

日本語で明記してある記事が出てこなかったので備忘録メモ

TSUBAMEの練習

TSUBAMEにアクセスするためにwindows10から試行錯誤したので備忘録

トップページ | TSUBAME計算サービス

とりあえずここ。

 

 

利用した環境

windows10 home

cygwin

X window

 

cygwinインストーラーで導入(32, 64 どちらでも可能)

インストール時に、Net、X11をインストールするようにチェックすること

550 Fail の警告が出た場合は、ftpではなくhttpからインストールするように設定するとうまく動作した。

0p_000_autorebase.dash みたいなものを走らせている間は時間がかかるので待つ。

ウイルス対策ソフトのせいで遅くなるという話もあるので、場合によっては切ってからインストールするといいらしい。

※インストール後に

c3270 error code 1

のようなコードが出たが、ガン無視でなんとかなった。

 

TSUBAMEにアクセス

sshでアクセスする必要がある。

東工大ポータルから入り、TSUBAMEにアクセス。

sshキーの公開鍵を登録。

秘密鍵パーミッションを700とかにしておくこと

ssh xxDyyyyy@login.t3.gsic.titech.ac.jp -i ./sshkey -YC

でアクセスできることを確認

 

Xterm 起動

cygwinから

startx

 

Xを直接

スタートメニューから

Cygwin X → Xwin server を起動

右下のメニューバーにXserverが出てくる

X application menu からXterms が起動できる。

 

テスト

とりあえずgeditでもひらいてみては。(筆者はここで感動)

 

TSUBAME上の有償プログラム(comsol)を使いたかったが現在年末のために人が多すぎるので入れず・・・。

qrshってなんだよ・・・

 

c++で球面調和関数を使いたかったけれどもライブラリがないからpythonから引っ張ってきた話

実のところあるらしいが、visual studio 2017ではなかったのでpythonのscipy.specialから引っ張ってくることにした。

 

c++pythonを使うには、

インタプリタを呼ぶ、pythonのオブジェクトを渡してムニャムニャする、インタプリタを閉じるの3構成である。

一度インタプリタを呼べば勝手にやってくれる。

複数のインタプリタを使う方法はあるのだろうか・・・。

 

windows 10 では python3 をインストールすると、Python.h が //python/include/ あたりにある。

このpathをインクルードのpathに追加する(プロパティページのVC++ディレクトリにある)。

dllも要求されるのでリンカーの全般タブにある追加のライブラリディレクトリに//python/libs/を追加する。

これでreleaseモードなら使える。

CPUのbit数も合わせる必要があるので注意。

 

忘れないようにメモメモです。

 

使うときは下参照。

int main(){int main(){ Py_Initialize();
PyObject * pModule = PyImport_ImportModule("scipy.special"); if (pModule == NULL) { return 0; }
PyObject * pFunc = PyObject_GetAttrString(pModule, "sph_harm");
PyObject * pArgs = PyTuple_New(4); PyObject * pValue0 = PyLong_FromLong(0); PyObject * pValue1 = PyLong_FromLong(0); PyObject * pValue2 = PyLong_FromLong(0); PyObject * pValue3 = PyLong_FromLong(0);
PyTuple_SetItem(pArgs, 0, pValue0); PyTuple_SetItem(pArgs, 1, pValue1); PyTuple_SetItem(pArgs, 2, pValue2); PyTuple_SetItem(pArgs, 3, pValue3);
Py_DecRef(pValue1); Py_DecRef(pValue2); Py_DecRef(pValue2); Py_DecRef(pValue3);

PyObject * pValue = PyObject_CallObject(pFunc, pArgs); double result = PyComplex_RealAsDouble(pValue); std::cout << "result: " << result << std::endl;
Py_DecRef(pModule); Py_DecRef(pFunc); Py_DecRef(pArgs);

Py_Finalize(); return 0;}

論文の参照の比較

web of science で得られる論文の参照関係をまとめたファイルを利用して引用している論文の一覧を取得する。

pythonで検討

 

web of science の上の方にプルダウンメニューでendnote~とかある場所から保存できる。

他のファイルフォーマットで保存を選ぶと、中でポップアップされる。ここにもプルダウンメニューがあるので

詳細表示、引用文献

をえらび、さらに保存形式を選ぶ。保存したファイルをテキトーにパースして読めば引用が比較できる。DOIとかで比較すればいいんじゃないのだろうか。

save as bibtex format

import re

ref1 = [x.replace("{","").replace("}","").replace(",","") for x in re.findall("DOI.*\n",open("savedrecs.bib",encoding='utf-8').read())]

これで取り出せる。自身のDOIは一番始めに来ている。

これで比較するのじゃー。

 

These latter two types of molecules are of interest for the spectroscopy as well as for the dynamics communities, because of the nearly degenerate doublets (l-type or Λ type doubling), which are attributed to either vibrational or electronic contribution on the internuclear projection of total angular momentum J

 

lタイプ:振動準位が縮退していることで、状態が2つあること。

λタイプ:電子準位が縮退していることで、状態が2つあること。

python高速化、シュミレーションに対して

pythonでシュミレーションを書いているので、高速化のために行ったことをまとめる。

知らないことはできないので、やれた範囲で。

 

1 ファイルの読み書き。

一度オープンしたファイルに書き込み続けていると途中で途切れてしまうのを防ぐためにopen > 一行書き込み > closeを繰り返していたが、流石に遅い。

文字列としてまとめる > open > 複数行(一粒ごと) > close なら途切れることなく書き込みが終わった。

もっと長めにとって書き込んだほうが早くなるのかもしれないが、そこの検証は諦めた。

 

2 2次元データの保持について

今回は、ポテンシャル曲面においてボールを転がすようなシミュレーションを行うので、ポテンシャル局面の配列にランダムアクセスする必要がある。

np.arrayに対するランダムアクセスは異様に遅いが、listも大差ないだろうと踏んでいたが、塵が積もった結果山になったのでlist管理に変更。

かなり早くなった。行列演算でできないこともないと思われるが、手間がかかるため断念。

 

3 オーバーヘッド

一部の関数を組み込むことで早くなったが、全てを組み込むと早くなるわけでもなかった。むしろ計算が狂い始めたのでほどほどに調整した。

 

4 メモリエラー

pythonが管理できるメモリには多分上限があるので、適宜破壊的代入を行うことでメモリを開放する必要がある。

使ったら0を代入している