Ching-Chuan Chen's Blogger

Statistics, Machine Learning and Programming

0%

原文是我在PTT回的一篇文章連結

其實是有人來問怎麼將character verctor放入函數中執行對應的動作

好讓函數變得簡單使用跟操作,那我提供了下面幾個解法:

Read more »

補充:我把程式放到GitHub,可以到這下載來玩:Link

Blaze claim it is fast. Link

所以我就來試試看Rcpp去link玩玩看

Read more »

我花了一點時間把RcppEigen升級到3.3.1,然後我發現一件滿有趣的事情(細節請看 Using BLAS/LAPACK from Eigen)

因為是我手動升級的,檔案放在我的github: 連結請點我

就是#define EIGEN_USE_BLAS可以用了,設定之後,RcppEigen會使用R的BLAS去做計算

如此一來,之前講到的RcppEigen的慢就可以被改善了

Read more »

想一想還是繼續把上一篇補完

所以這次就活用了LAPACK查詢,去得到the optimal sizes of the WORK array and IWORK array

R code沒什麼更動,只是多了一些check results的動作

也試試看第2,3個input得到的結果是否正確

Read more »

kernal matrix computation這個主題不只被我用了一次

其實我在PTT分享RcppParallel也是用了這個當例子,文章連結

那這裡就延續上篇的程式把RcppParallel一起拉進來比較一下吧

因為我已經知道p大的時候,我每一個都逐一算其實很慢

那我這裡的RcppParallel就改變一下做法

讓RcppParallel不會因為p改變而使得計算效率改變

Read more »

剛好有點時間來研究一下Rcpp怎樣直接使用底層Fortran 77的BLAS跟LAPACK函數

我覺得最難的還是要去讀BLAS或LAPACK的文件,然後配置適當的input餵進去

我這裡就簡單demo一下怎麼樣用LAPACK的dsyevr去計算symmetric matrix的eigenvalues跟eigenvectors

(BLAS部分其實很接近,有興趣的人可以自己改成用BLAS的函數去做,一樣用F77_CALL即可)

裡面還是有不少配置,我沒有好好活用,不過我覺得就先這樣吧,等到有需要再慢慢深入去寫

畢竟我現在直接使用BLAS/LAPACK的場合真的不多,寫那麼底層對我真的有點困難Orz

我還是乖乖去用RcppEigen跟RcppArmadillo好了

不過直接用BLAS,可以gain到一些performance,也有比較多flexible的設定

深入去玩的話,我覺得對程式效能改進有一定幫助

Read more »