Rのオブジェクト指向について調べていて、S3はlistだという表現が比喩なのかlistを使って実装されているのか気になった。ついでにS4クラスなどの実装も軽く調べておく。
続きを読むpydotplusでdoxygenで生成したdotファイルを操作する
dot言語はグラフ構造をテキストファイルで表したもの。pydotというライブラリが有名だそうだが、手元で動かなかったためpydotplus(pydotplus 2.0.2 : Python Package Index)というライブラリをインストールした。dotファイルを読み込んだあとは基本的にgetter/setterで値にアクセスする。pythonでgetter/setter書く例は少ないので実装を確認したところ、メンバ変数は実際には辞書で登録されていた。
続きを読むPoisson Image Editing
以前の記事で利用したPoisson Surface Reconstructionのアルゴリズムを調べる前に2次元でポアソン方程式を解く手法について調べたところ、Poisson Image Editingを見つけた。この手法を3次元に拡張すると3次元メッシュも変形できる。
続きを読むCGALのサンプルを実行する(その2)
前回の記事に続いてCGAL 4.8 - Point Set Processing: User Manualを実行してみる。aptで拾ってきたcgalだとバグがあるようで型エラーが取れなかったのでgithubからダウンロードしたソースコードをビルドして利用した。
続きを読むRの並列化
Rも並列化で高速化することが可能らしい。使うパッケージとしてはRmpi、snow、pforeachがある。pforeachが一番後発なので多分使いやすいのだろう?
- Rmpi
- snow
- pforeach
2019/02/18 追記
parallel, foreach, dosnow, doparallel, snowfall, domc, furrr, future, future.batchtools, dompi など山ほど出てくる。
foreachパッケージをdoMCやdoSNOWパッケージと組み合わせて使うのが便利そうである。どちらを使うかであるが、foreach-based Parallelismを見ると
4.2. doMC: shared-memory parallelism 4.3. doSNOW: distributed-memory parallelism
とのことであり、doMCはそもそもWindows用のバイナリを配布していない。ということで、他の人に使ってもらうときはdoSNOW、自分で使うときは基本的にdoMC、クラスタを使うときはdoSNOWということにしておく。%dopar%
でだめなら%do%
にすれば並列化をoffにできる。
# doMC + foreach library(foreach) library(doMC) registerDoMC(cores=as.integer(system("nproc", intern=TRUE)) - 1) result <- foreach(i=1:10, .combine=c, .export=ls(envir=parent.frame())) %dopar% { myProc() } result
# doSNOW + foreach library(foreach) library(doSNOW, quietly=TRUE) library(parallel) # detectCores cluster <- makeCluster(detectCores(), type="SOCK") # cluster <- makeCluster(detectCores() - 1, type="MPI") registerDoSNOW(cluster) result <- foreach(i=1:10, .combine=c, .export=ls(envir=parent.frame())) %dopar% { myProc() } result stopCluster(cluster)
2019/02/19 追記
GPUも使ってみたい。R Language - GPU加速コンピューティング | r Tutorialを見るにnvidia製gpuならgputools、それ以外ならgpurを使うしかなさそう。openclパッケージはOpenCLをベタ書きするのでもはやRではない。