作者lihgong (人生,是一句引用句)
看板MATLAB
标题[心得] 用 Matlab 写 MEX 函数加速 vol.3
时间Thu May 17 02:01:13 2007
上一篇在讲怎麽处理 output
这一篇我们来看看怎麽处理 input
围绕着整个主题, C-style 和 Fortran-style 之间的转换
是看懂这些程式的关键
outline
* 辨识有多少个输入变数
* 读取输入变数的内容
----
直接从一个 example 开始吧
#include "mex.h"
#include <math.h>
#include <stdio.h>
void mexFunction(
int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
printf("%d\n", nrhs);
}
把档案取名为 test_input.c
编译
mex test_input.c
并且执行以下指令, 观察结果
test_input(1)
test_input(1, 2, 3)
test_input(1, 2, 3, 4, 6)
这个做完以後, 应该可以看出 nrhs 这个变数的意义
先用这个简单的例子当做开场
----
接下来, 设计一组简单的输入...
input = zeros(2, 5)
input(1, :) = 1:5
input(2, :) = 5:-1:1
如此 input = [ 1 2 3 4 5
5 4 3 2 1]
我想设计一个 MEX-function
读取并印出第一个 row, 其次是第二个 row
注意在下面的程式里
mxGetM() 取得 Matrix 有几个 row
mxGetN() 取得 Matrix 有几个 column
程式不困难, 有任何问题打 helpwin 配上 search
函数名称打进去都看得到使用说明
----
#include "mex.h"
#include <math.h>
#include <stdio.h>
// Program test for input
// usage:
// input = zeros(2, 10)
// input(1, :) = 1:10
// input(2, :) = 10:-1:1
// mex test2.c
// test2(input)
// note: type all commands above in Matlab Command Window
void mexFunction(
int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
int i, j, k;
int input_dim_x;
int input_dim_y;
double *in; // pointer to process content of the input
double *test;
// print some message about input data
printf("nrhs: %d\n", nrhs);
printf("mxGetM(prhs[0]): %d\n", mxGetM(prhs[0]));
printf("mxGetN(prhs[0]): %d\n", mxGetN(prhs[0]));
in = mxGetPr(prhs[0]); // get data pointer
input_dim_x = mxGetM(prhs[0]);
input_dim_y = mxGetN(prhs[0]);
// print input content
for(i=0; i<input_dim_x; i++) // x
for(j=0; j<input_dim_y; j++) // y
// notice: data type is "float", you shall use "%f" insted of "%d"
printf("%f\n", in[i + j*input_dim_x]);
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.128.237