MATLAB 板


LINE

這一篇是我和朋友討論怎麼處理 3-dimension 的輸入 弄了一陣子, 我們討論出一個滿好用的 MACRO 可以把 (x, y, z) 轉成 array 的 index TWO_D_INDEX(dim_x, dim_y, x, y) THREE_D_INDEX(dim_x, dim_y, dim_z, x, y, z) 舉例來說, 有個 Matrix A 大小是 3x6 如果 A(3, 5) = 6 因為 C 語言的index從 0 開始, (3, 5) 轉到 C 語言變成 (2, 4) 把(2, 4) 轉成 data-array 的 index, 可以套用 TWO_D_INDEX() 這個 macro TWO_D_INDEX(3, 6, 2, 4) dim_x dim_y x y 把 MACRO 裡的運算看懂, 並且實際驗證 之後就不用煩惱這些麻煩的 index 轉換了 ---- 另外這一篇 note 還有一個主題, 是取出 mxArray 裡的 dimension 資訊 mxArray 裡有兩個欄位, 分別記錄有幾個 dimension, 以及每個 dimension 的大小 轉成程式碼, 就是類似下面的操作... // Input dimension processing input_num_of_dimensions = mxGetNumberOfDimensions(prhs[0]); input_dim = mxGetDimensions(prhs[0]); // print dimension information printf("Number of dimensions of the input: %d\n", input_num_of_dimensions); for(i=0; i<input_num_of_dimensions; i++) printf("Length of dimension #%d is %d\n", i+1, input_dim[i]); 為什麼要取出 dimension 的資料? 因為要把 (x, y, z) 轉成 data-Array index 時, 需要這些資料 所以這一小段程式碼是必要的 ---- 最後是範例程式在做什麼 程式的輸入是一個 3-D matrix 印出 (desired_index_x, desired_index_y, desired_index_z) int desired_index_x = 32 -1; int desired_index_y = 3 -1; int desired_index_z = 160 -1; 每個數都減 1 的理由是 C 的 index 從 0 開始 餵給這個函數的輸入也有特別設計, 如下 for i=1:32 for j=1:3 for k=1:16384 input(i, j, k) = i + j*1000 + k*1000*1000; end end end zzzzyyyyxxxx index-x index-y index-z ---- #include "mex.h" #include <math.h> #include <stdio.h> // Program test for input // usage: /* * MATLAB code clear all; input = zeros(32, 3, 16384); for i=1:32 for j=1:3 for k=1:16384 input(i, j, k) = i + j*1000 + k*1000*1000; end end end */ // mex test4.c // test4(input) // note: type all commands above in Matlab Command Window #define TWO_D_INDEX(d_x, d_y, x, y) (x + y*d_x) #define THREE_D_INDEX(d_x, d_y, d_z, x, y, z) (x + y*d_x + z*d_x*d_y) void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { int i, j, k; // input int input_num_of_dimensions; int *input_dim; double *in; // pointer to process content of the input int input_dim_x; int input_dim_y; int input_dim_z; int desired_index_x = 32 -1; int desired_index_y = 3 -1; int desired_index_z = 160 -1; int index_desired; /* -------------------------------- */ /* NECESSARY: dimension & data pointer for input */ in = mxGetPr(prhs[0]); // get data pointer // Input dimension processing input_num_of_dimensions = mxGetNumberOfDimensions(prhs[0]); input_dim = mxGetDimensions(prhs[0]); // print dimension information printf("Number of dimensions of the input: %d\n", input_num_of_dimensions); for(i=0; i<input_num_of_dimensions; i++) printf("Length of dimension #%d is %d\n", i+1, input_dim[i]); // specify the length of dimension x, y, and z input_dim_x = input_dim[0]; input_dim_y = input_dim[1]; input_dim_z = input_dim[2]; /* -------------------------------- */ index_desired = THREE_D_INDEX( input_dim_x, input_dim_y, input_dim_z, desired_index_x, desired_index_y, desired_index_z); printf("%f\n", in[index_desired]); } --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.236.184
1F:推 sunev:順帶一提...matlab有內建指令ind2sub及sub2ind 05/19 15:00
※ 編輯: lihgong 來自: 140.113.236.184 (05/20 17:10)







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP