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を代入している

学振書類まとめ・3月期

様式集 | 特別研究員|日本学術振興会

このへんと、採用ポータルサイトをにらめっこしながら埋めていく。

基本的には名前書く(念のため押印する)だけで終わる。

 

扶養控除等申請書のCの項目・勤労学生の記述がわからなかった。

結局、勤労学生にチェックを入れ、大学名と入学日および給与所得+金額を記入する。何らかの稼ぎがない場合は、給与所得の金額を61万とすれば良い。この61万の根拠は、申請書の書き方が説明されているPDFの一番最後にある、Q&A欄に記述がある。研究遂行費の申請をしているなら、1年目だけ65万を下回れるため、申請が可能になる。減税は大事。

この書類だけ押印が義務である。後マイナンバーは書かない。書いていると受け付けてくれないらしい。縦割り行政だし仕方ないね。

卒業論文・修士論文を書く人へ

 

卒論・修論の書き方のいろは

 

とりあえずなんか読んでみると良い。

 

直しをもらったら一回こういうサイトを読んでみたりすると落ち着いてできるかも