我是靠谱客的博主 俊秀八宝粥,最近开发中收集的这篇文章主要介绍MATLAB/C Mex函数中矩阵的是按列向量形式存储的,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

对于这样一个6*3的矩阵,它是这样分配内存的:
plhs[2] = mxCreateDoubleMatrix((mwSize)6, (mwSize)3, mxREAL);
如果测试它的具体是怎么分配的:
yout = mxGetPr(plhs[2]);
会发现yout是一个一维double指针double *,也就是一维数组。很显然,矩阵在mexFunction内部是按照列向量的形式存储的。

对于这样一个矩阵,
A = [ 11 12 13 21 22 23 31 32 33 41 42 43 51 52 53 61 62 63 ] A=begin{bmatrix} 11&12&13\ 21&22&23\ 31&32&33 \ 41&42&43\ 51&52&53\ 61&62&63 \ end{bmatrix} A=112131415161122232425262132333435363
它的赋值是这样完成的:

	A[0]  = 11;
	A[6]  = 12;
	A[12] = 13;
	A[1]  = 21;
	A[7]  = 22;
	A[13] = 23;
	A[2]  = 31;
	A[8]  = 32;
	A[14] = 33;
	A[3]  = 41;
	A[9]  = 42;
	A[15] = 43;
	A[4]  = 51;
	A[10] = 52;
	A[16] = 53;
	A[5]  = 61;
	A[11] = 62;
	A[17] = 63;

C Mex程序中对矩阵的I/O

如果是想要如此一直赋值到N * 3,二层嵌套的for循环应该这样写:

for (int k = 0; k < N; k++)
	for (int m = 0; m < 3; m++) {
		yout[m * N +k] = (k+1)*10+(m+1);
	}

于是,可以定义这样一个按行输出矩阵的函数,它可以在CMex中调用:

void DisplayMatrix(char *Name, double *Data, int M, int N)
{ /* Display matrix data */
	int m, n;
	mexPrintf("%s = n", Name);
	for (m = 0; m < M; m++, mexPrintf("n"))
		for (n = 0; n < N; n++)
			mexPrintf("%8.4f ", Data[m + M*n]);
}

调用格式为:

A = mxCreateDoubleMatrix(M, N, mxREAL); /* A is an mxArray */
DisplayMatrix("A", mxGetPr(A), M, N);

拓展内容

在Writing MATLAB C-MEX Code.pdf这本书中还说了其他数组或矩阵都是按照列向量存储的,如下图:
在这里插入图片描述

复数矩阵

在这里插入图片描述
高维矩阵

最后

以上就是俊秀八宝粥为你收集整理的MATLAB/C Mex函数中矩阵的是按列向量形式存储的的全部内容,希望文章能够帮你解决MATLAB/C Mex函数中矩阵的是按列向量形式存储的所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部