文章總列表

用 Matlab 寫 MEX 函數加速 vol.5

這一篇是我和朋友討論怎麼處理 3-dimension 的輸入
弄了一陣子, 我們討論出一個滿好用的 MACRO
可以把 (x, y, z) 轉成 array 的 index



舉例來說, 有個 Matrix A 大小是 3x6
如果 A(3, 5) = 6
因為 C 語言的index從 0 開始, (3, 5) 轉到 C 語言變成 (2, 4)

把(2, 4) 轉成 data-array 的 index, 可以套用 TWO_D_INDEX() 這個 macro



把 MACRO 裡的運算看懂, 並且實際驗證
之後就不用煩惱這些麻煩的 index 轉換了


----


另外這一篇 note 還有一個主題, 是取出 mxArray 裡的 dimension 資訊
mxArray 裡有兩個欄位, 分別記錄有幾個 dimension, 以及每個 dimension 的大小

轉成程式碼, 就是類似下面的操作...



為什麼要取出 dimension 的資料?
因為要把 (x, y, z) 轉成 data-Array index 時, 需要這些資料
所以這一小段程式碼是必要的


----


最後是範例程式在做什麼

程式的輸入是一個 3-D matrix
印出 (desired_index_x, desired_index_y, desired_index_z)



每個數都減 1 的理由是 C 的 index 從 0 開始


餵給這個函數的輸入也有特別設計, 如下



----


留言

這個網誌中的熱門文章

幼犬書桌椅選擇心得 升降桌 兒童桌椅

STM32 UART + DMA,使用HAL實作TX/RX,以及不定長度接收

CANON G3000 廢墨瓶改裝