最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++的matlab接口轉(zhuǎn)換方法詳解

 更新時間:2022年03月30日 11:17:56   作者:菜鳥小白進(jìn)化ing  
這篇文章主要為大家詳細(xì)介紹了C++的matlab接口轉(zhuǎn)換方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

由于matlab的運算速度較慢,因此常常需要使用c++對關(guān)鍵部分進(jìn)行運算。Matlab針對這一需求提供了相應(yīng)的api方便參數(shù)傳遞以及封裝。

這里使用的vs工程,對文件進(jìn)行修改生成.mexw64文件,對于matlab可識別的文件。

這里的操作都是針對vs進(jìn)行配置和操作。

一.工程配置

1.配置生成文件

右鍵->屬性->常規(guī)->配置類型 動態(tài)庫(.dll)

右鍵->屬性->高級->目標(biāo)文件擴展名 .mexw64

2.配置附加目錄

右鍵->屬性->c++->附加包含目錄  添加$(Matlab_Dir)\extern\include; 

其中$(Matlab_Dir)為matlab安裝地址

右鍵->屬性->鏈接器->附加庫目錄 添加$(Matlab_Dir)\extern\lib\win64\microsoft;;

其中$(Matlab_Dir)為matlab安裝地址

3.添加附加依賴項

右鍵->屬性->鏈接器->輸入->附加依賴項

輸入libmx.lib;libmex.lib;libmat.lib;libeng.lib;

二.接口編寫

1.添加頭文件

#include "mex.h"是matlab提供的頭文件,利用提供的api進(jìn)行接口函數(shù)編寫

2.接口函數(shù)編寫

入口過程的名稱必須是mexFunction,并且包含四個參數(shù)

void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]);

nlhs 輸出參數(shù)個數(shù),plhs 輸出參數(shù)指針 

nrhs 輸入?yún)?shù)個數(shù),prhs 輸入?yún)?shù)指針 

注意: 輸出和輸入?yún)?shù)的操作都是通過指針的方式進(jìn)行的。MATLAB可以通過這些指針,訪問內(nèi)存中的數(shù)據(jù)。

3.輸入?yún)?shù)獲取

接口過程要把參數(shù)傳遞給計算過程,還需要從prhs中讀出矩陣的信息,這就要用到下面的mx-函數(shù)和mex-函數(shù)。

  • mxGetM(prhs[0]); 獲取其行數(shù)
  • mxGetN(prhs[0]); 獲取其列數(shù)
  • mxGetNumberOfDimensions(prhs[0]);獲取其維度

主要介紹的是數(shù)據(jù)獲取的兩個函數(shù) mxGetData 和 mxGetPr。

mxGetData返回值為void類型的指針,必須轉(zhuǎn)換為正確數(shù)據(jù)類型的指針的指針。

mxGetPr返回值為double類型的指針,可以理解為它會自動轉(zhuǎn)換 mxGetData的輸出作為double指針。

在使用上這兩種都可以獲取參數(shù)內(nèi)容。

還有一點需要注意的是,無法對未獲取的值進(jìn)行操作。

下面的代碼在調(diào)試時會報錯,無法對于未保存的變量進(jìn)行操作。

Number = ((double*)mxGetData(mxGetCell(prhs[0], 19)))[0]-1;

4.出錯信息發(fā)布函數(shù)mexErrMsgTxt,mexWarnMsgTxt

兩函數(shù)的具體格式如下:

#include "mex.h"

void mexErrMsgTxt(const char *error_msg);

void mexWarnMsgTxt(const char *warning_msg);

其中error_msg包含了要顯示錯誤信息,warning_msg包含要顯示的警告信息。兩函數(shù)的區(qū)別在于mexErrMsgTxt顯示出錯信息后即返回到MATLAB,而mexWarnMsgTxt顯示警告信息后繼續(xù)執(zhí)行。

5.輸出參數(shù)設(shè)置

對于程序的返回結(jié)果需要將其保存在plhs指針當(dāng)中,而且保存在plhs的返回指針類型必須是mxArray。

這里介紹兩個api進(jìn)行數(shù)組,矩陣的創(chuàng)建。由于常用的數(shù)據(jù)類型為double,這里列舉的均為double類型的數(shù)組。

plhs[0] = mxCreateNumericArray(3, dims,mxDOUBLE_CLASS, mxREAL);
plhs[1] = mxCreateDoubleMatrix(n, n, mxREAL);    

6.參數(shù)轉(zhuǎn)置

由于matlab的數(shù)據(jù)存儲順序與c++不同,因此在數(shù)據(jù)輸入時需要對數(shù)據(jù)進(jìn)行轉(zhuǎn)換。在數(shù)據(jù)輸出傳遞的時候,同樣也需要對數(shù)組進(jìn)行轉(zhuǎn)換。

matlab對于數(shù)組存儲是按照列進(jìn)行保存的,而c++是按照行進(jìn)行保存,因此在數(shù)據(jù)計算時需要格外注意。

這里是常用的行列轉(zhuǎn)換的代碼。

template <class T1, class T2>
void cTranspose3d(T1* dst, T2* src, int srcRow, int srcCol, int channel)
{
	int i = 0, k = 0;
	T1* dst1 = NULL;
	T2* src1 = NULL;
	for (k = 0; k < channel; k++)
	{
		dst1 = dst + k * srcRow * srcCol;
		src1 = src + k * srcRow * srcCol;
		for (i = 0; i < srcRow * srcCol; i++)
		{
			dst1[i] = src1[(i % srcRow) * srcCol + (i / srcRow)];//th/ srcRow//src's  col -> dst's row,th%srcRow//src's   row -> dst's col
		}
	}
}

總結(jié)

至此整個接口書寫就結(jié)束了。該篇教程也是記錄一下自己整個學(xué)習(xí)過程,希望能夠看的人一點點幫助。

相關(guān)文章

  • C語言實現(xiàn)時區(qū)轉(zhuǎn)換函數(shù)的實例

    C語言實現(xiàn)時區(qū)轉(zhuǎn)換函數(shù)的實例

    這篇文章主要介紹了C語言實現(xiàn)時區(qū)轉(zhuǎn)換函數(shù)的實例的相關(guān)資料,這里分析需求并提供實現(xiàn)代碼,需要的朋友可以參考下
    2017-08-08
  • C++中的并行與并發(fā)基礎(chǔ)與使用詳解

    C++中的并行與并發(fā)基礎(chǔ)與使用詳解

    對于多線程來說,這兩個概念有很大部分是重疊的。對于很多人來說,它們的意思沒有什么區(qū)別。其區(qū)別主要在于關(guān)注點和意圖方面(差距甚微)。這兩個詞都是用來對硬件在同時執(zhí)行多個任務(wù)的方式進(jìn)行描述的術(shù)語,不過并行更加注重性能
    2023-02-02
  • C++?Queue隊列類模版實例詳解

    C++?Queue隊列類模版實例詳解

    這篇文章主要為大家詳細(xì)介紹C++?Queue隊列類模版實例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 使用C語言實現(xiàn)學(xué)生成績管理系統(tǒng)

    使用C語言實現(xiàn)學(xué)生成績管理系統(tǒng)

    這篇文章主要介紹了使用C語言實現(xiàn)學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 講解C++的do while循環(huán)和循環(huán)語句的嵌套使用方法

    講解C++的do while循環(huán)和循環(huán)語句的嵌套使用方法

    這篇文章主要介紹了講解C++的do while循環(huán)和循環(huán)語句的嵌套使用方法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C++編譯器無法捕捉到的8種錯誤實例分析

    C++編譯器無法捕捉到的8種錯誤實例分析

    這篇文章主要介紹了C++編譯器無法捕捉到的8種錯誤,是深入學(xué)習(xí)C++所必須加以掌握的排錯技能,需要的朋友可以參考下
    2014-09-09
  • C++變位詞問題分析

    C++變位詞問題分析

    這篇文章主要介紹了C++變位詞問題分析,非常經(jīng)典的算法,對于進(jìn)行C++下的算法設(shè)計有很大的啟發(fā)性,需要的朋友可以參考下
    2014-08-08
  • 解析bitmap處理海量數(shù)據(jù)及其實現(xiàn)方法分析

    解析bitmap處理海量數(shù)據(jù)及其實現(xiàn)方法分析

    本篇文章是對bitmap處理海量數(shù)據(jù)及其實現(xiàn)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++11生成隨機數(shù)(random庫)的使用

    C++11生成隨機數(shù)(random庫)的使用

    隨機數(shù)在很多地方都可以用到,本文主要介紹了C++11生成隨機數(shù)(random庫)的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • vs2017智能感知錯誤解決代碼標(biāo)紅但編譯通過問題

    vs2017智能感知錯誤解決代碼標(biāo)紅但編譯通過問題

    這篇文章主要介紹了vs2017智能感知錯誤代碼標(biāo)紅但編譯通過問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08

最新評論

英山县| 深圳市| 洛宁县| 秀山| 南郑县| 八宿县| 石城县| 平陆县| 桑植县| 固安县| 内乡县| 靖边县| 临泽县| 垣曲县| 邯郸市| 庐江县| 威信县| 乌鲁木齐县| 定日县| 屏东县| 鹿泉市| 于都县| 多伦县| 含山县| 察哈| 黄大仙区| 文安县| 疏勒县| 海晏县| 遂平县| 邵武市| 绍兴市| 阳西县| 昌吉市| 梧州市| 定南县| 灵武市| 合川市| 胶州市| 屯昌县| 永嘉县|