Re: [問題] 請問用C求n*n矩陣的eigenvalue及eigenv …
看板C_and_CPP (C/C++)作者forloricever (sigh...)時間14年前 (2011/10/15 21:56)推噓3(3推 0噓 9→)留言12則, 6人參與討論串4/4 (看更多)
※ 引述《DrStein (啤酒肚)》之銘言:
: 請愛用lapack
: 若不會調用,有人已包好:
: http://www.netlib.org/
: 直接用就是。
一個小問題,為什麼不用 MATLAB?
有個矩陣 A, 只要打 eig(A) 就都算完了, 只要花三秒打六個字元。
為了速度? C++ 會比較快? 用 netlib 的 lapack 會比較快?
power method?? 真的嗎??
為了做簡單的矩陣運算 (沒有成千上萬亂寫的 for loop 之類),
用 C++ 根本就是在找自己麻煩浪費時間。
不相信的話就 C++ 隨手寫個矩陣相乘, 例如 A B 各是 2000x2000
(或是矩陣 * 向量, 因為 power method 要一直疊代做這件事。)
然後打開 MATLAB 輸入 a = rand(2000); b = rand(2000); tic; a*b; toc
你很快會發現殘酷的事實...
別忘了把 -O3 打開, 但是,
相信我, 當你看到速度差距後, 很多人再也不會想用 C++ 做矩陣運算
---
WHY? 事實上 MATLAB 底層在做矩陣計算,
他包好了 Intel Math Kernel Library,
(AMD CPU 會用 ACML, 比 MKL 慢一些)
比 netlib 裡的 reference BLAS, Lapack 快多了
(加上多核心, SSE2, SSE3, AVX 等指令集加持, 很多 routine 快了十幾倍有吧...)
那你要算的比 MATLAB 快,就直接的方法就是 C or C++ or fortran 用 MKL,
(在 Linux 下學術用途免費,所以請不要用 Windows)
可是 LAPACK, BLAS 的 API 實在不是普通地難 call...
最後 compile, link 可能還會碰到新的問題。
OPEN CV 我是沒用過, 不過 google 了一下找到了這個
https://plus.google.com/102951334411452742447/posts/KfvpBrSygB2
簡單來說就很慢
至於之前提到的 Eigen,
http://eigen.tuxfamily.org/index.php?title=Main_Page
似乎是最簡單在 C++ 裡得到還不錯地效能。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.38.170
推
10/15 22:05, , 1F
10/15 22:05, 1F
※ 編輯: forloricever 來自: 118.168.77.199 (10/15 22:25)
→
10/16 03:13, , 2F
10/16 03:13, 2F
→
10/16 03:13, , 3F
10/16 03:13, 3F
→
10/16 03:13, , 4F
10/16 03:13, 4F
推
10/16 12:48, , 5F
10/16 12:48, 5F
推
10/16 22:04, , 6F
10/16 22:04, 6F
→
10/16 22:04, , 7F
10/16 22:04, 7F
→
10/16 22:44, , 8F
10/16 22:44, 8F
→
10/16 22:44, , 9F
10/16 22:44, 9F
→
10/16 22:45, , 10F
10/16 22:45, 10F
→
10/17 07:36, , 11F
10/17 07:36, 11F
→
10/17 07:36, , 12F
10/17 07:36, 12F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章