将Matlab数组转换为C语言样式的维度
目的:将Matlab的数组中按列存储的数据以行*列的形式传递给C函数,为什么会有这一问题?
因为Matlab语言中的多维数组存储方式为列优先原则,内循环最好是列循环;而c语言中的多维数组存储方式为行优先原则,内循环最好是行循环。
函数命令:print2darray C语言中创建2维数组
首先需要加载内置了该函数的库——shrlibsample
if not(libisloaded('shrlibsample')) %判断有无加载,若无用addpath函数添加路径
addpath(fullfile(matlabroot,'extern','examples','shrlib'))
loadlibrary('shrlibsample')
end
创建一个4行3列的 MATLAB 数组。
m = reshape(1:12,4,3)
1 5 9
2 6 10
3 7 11
4 8 12
calllib('shrlibsample','print2darray',m,4) %在shrlibsample库中调用函数shrlibsample,输入参数为m、4。
1 2 3
4 5 6
7 8 9
10 11 12
即Matlab中数组保证4行前提下按列重新排序,若参数为5,则第五行随机数。
最后转置 上述数组 以获得原来Matlab中的4行3列数组。
calllib('shrlibsample','print2darray',m',4)
1 5 9
2 6 10
3 7 11
4 8 12
注意**:这个函数是在原数组格式下将行和列交换,与矩阵转置不同,4行3列转置后为3行4列。**