GUIインストーラ付きArch LinuxであるところのAntergosが開発停止になった。Antergos固有のレポジトリにあるものはAURに移行するのでとりあえず今使用しているシステムは使い続けられる、とのこと。移行先を考えねば...
pythonで.RDataファイルの中身(array)を読み込む
import rpy2.robjects as ro # RDataの中に入っているデータについている名前は事前にRで確認しておく # arrayの次元はhoge$dimで取れないので下記リンクと異なる ro.reval("load(\"test.RData\"); data<-hoge; shape<-dim(hoge)") # https://stackoverflow.com/questions/31271181/how-to-convert-an-r-complex-matrix-into-a-numpy-array-using-rpy2 data = np.array(list(ro.r.data)).reshape(ro.r.shape, order='F') print(data.shape) # (3, 90795, 441)
Wasserstein距離
https://twitter.com/yoriyuki/status/1126423987444015104を見かけた。Wassersteinとは何か調べると、Wasserstein GAN と Kantorovich-Rubinstein 双対性という記事を見つけた。DeepLearningは理解していないが、線形代数的な話題として捉えられるらしい。
- 距離関数を適切に(どうやって?)定められたとすると、
- 離散確率分布の距離をEMDとして定義できる
- 極限を取ったものがWasserstein距離になる
- EMDを計算するためには輸送にかかるコストを計算することになる
- 双対問題を考えると、全コストの計算をせずにEMDを計算できる
- 双対問題を解くので十分な理論的な根拠はFarkasの補題というものが保証している
- 後半の議論は疲れたのでフォローできていない
次元によらず確率分布の距離を測る方法としてOptimal transportが使われるという話は聞いていたが、Earth mover's distanceと直接関係があるとは知らなかった。EMDはかなりプリミティブな概念だが、プリミティブなものを軽視してはいけないという反省が生じた。この手法だと、確率分布の比較は出来るが、時系列のような確率分布を並べたものを生成する規則があるとして、その規則そのものの距離はそのままでは測れないという制限がありそう。
dockerコマンドメモ
docker login docker pull archlinux/base docker build -t antergos_base . docker -it --rm antergos_base bash docker save antergos_base > antergos_base.tar # tag情報は保存されない docker load < antergos_base.tar # need afterwards: docker tag 6834.... hoge/hoge:latest docker export antergos_base > antergos_base.tar docker import antergos_base.tar antergos_base docker image ls docker ps -a docker rm $(docker ps -aq) docker image rm id
球面調和関数係数(3 x n行列)の可視化
3次元空間にひと塊の形(球と同相)があって、その表面上の点の集合を考える。何らかの方法で塊は球面に変形できて、その変形に伴って点の集合は球面上に写される、と考える。その時、元のX、Y、Z座標をそれぞれ球面上の分布($S^{2} \to \mathrm{R}$)と考えると、これは球面調和関数で分解できることになる。3つ係数の列が取れるので、それを3xnの行列とする。これを元の塊の表面に戻すのは、係数を使って色々の$\theta$、$\phi$についてX、Y、Zを計算してやるだけで良い。
続きを読むpythonからシェルスクリプトを呼び出す
一塊になったシェルスクリプトをリファクタリングしている。
- ただ呼び出す場合
import subprocess class ShellException(Exception): pass def shell_exec(cmd: str, timeout_s: float = 0) -> None: cmd_org = cmd timeout_s = "" if timeout_s == 0 else "timeout {} ".format(timeout_s) cmd = "set -euxo pipefail\n" + timeout_s + cmd proc = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) print(proc.stdout.decode('utf-8')) if proc.returncode != 0: msg = "Execution of \"{}\" failed. \n\n {}" sh_msg = proc.stdout.decode('utf-8') raise ShellException(msg.format(cmd_org, sh_msg)) shell_exec("echo 'Hello World!'")
- 値を取り出す場合
import subprocess class ShellException(Exception): pass def shell_valueof(cmd: str, timeout_s: float = 0) -> str: cmd_org = cmd timeout_s = "" if timeout_s == 0 else "timeout {} ".format(timeout_s) cmd = "set -euo pipefail\n" + timeout_s + cmd proc = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) if proc.returncode == 0: return proc.stdout.decode('utf-8') else: # return "" msg = "Execution of \"{}\" failed. \n\n {}" sh_msg = proc.stdout.decode('utf-8') raise ShellException(msg.format(cmd_org, sh_msg)) val = shell_valueof("pwd")
vscodeでmarkdownからpdfに変換する
Makdown MathとMarkdown PDFという拡張機能をインストールしてみた。Visual Studio Code - ArchWikiとError: Failed to lanuch chrome! · Issue #97 · yzane/vscode-markdown-pdf · GitHubを見て取り敢えずchromiumの実行ファイルのパスを入力した(~/.config/Code\ -\ OSS/User/settings.json
に"markdown-pdf.executablePath": "/bin/chromium"
を追記)ところ一応動いているようである。
tex対応についてはtex環境を整えるのが面倒なので、VSCode の Markdown で数式を表示して PDF 化する - Qiitaに従ってkatexを利用できるようにした。
doubleしか入っていないCSVをパースするプログラム
要件はメモリ128GBのPCで70GBのCSVをnp.ndarray形式でメモリに乗せること。np.load_txtも一応試したが、エラーでターミナルやブラウザも巻き込んで落ちた。std::ios::seekdirは相対位置指定にしか使えないはずだが、enumのため型変換されて、引数一つだけで与えてもコンパイルエラーになっていないことに気付くまでが一番長かった(c++ - Istream seekg() offsets and ios::end - Stack Overflow)。かなり遅いがI/Oがボトルネックなのかも知れない。
pybindでC++からpythonを呼び出す実行ファイルを作る
それほど難しくないはずだが、実際バグらせると無限のコンパイルエラーが出て結構つらい。以下はサンプルコード。
続きを読む