matlab中find函數的思路是怎樣的,為何可以如此高效?

最近幫師兄解決一個問題的時候,用 matlab 中 find 函數在一個大小在1000000*10的矩陣中查找合適的數據。發現其效率非常高。很好奇這個函數是如何實現的,但是這是一個build in 函數。


對於 Matlab 中的 built in 函數,不能直接用 edit 命令查看源代碼的,可以試試用 coder 把 m-files 轉成 C 來看。對於題主的問題,可以試試以下辦法。

寫個簡單的 wrapper。

function I = cfind(X)
I = find(X);
end

在 Matlab 命令行中運行 coder,添加 cfind.m 文件,指定參數 X 為 int32, 大小為 1000000 x 10. 在第二頁的 settings 中選擇 Output type 為 C/C++ Static Library,勾上 Generate code only,點擊 Build. 等待完成後,點擊最下面的 View Report。

最終生成的 C code 我就不貼了,就是再普通不過的循環判斷。有興趣的話,題主可以親自試試。


它的演算法就是普通的循環遍歷,只是它是用c語言實現的,比你用matlab寫一個遍歷要快很多。


推薦閱讀:

C++獲取數組長度只返回1?
程序員有哪些借口可以讓自己寫的代碼里到處都是Bug並且代碼可讀性很低?
g++中數組和vector元素個數最多只能是2^31 -1個嗎?
C++ 如何跨平台判斷操作系統是32位還是64位?
為什麼 C++ 有指針了還要引用?

TAG:編程語言 | 效率 | MATLAB | C |