摘要:(3)需要重點(diǎn)說(shuō)明的是該方法的擴(kuò)展性。通常Excel文件中保存多個(gè)工作區(qū),有時(shí)用戶可能需要打開同一Excel文件中不同工作區(qū)中的數(shù)據(jù),常規(guī)方法實(shí)現(xiàn)過(guò)于復(fù)雜,但對(duì)于本文介紹的方法可以通過(guò)修改添加幾條語(yǔ)句即可實(shí)現(xiàn)。首先,新建一個(gè)m文件用來(lái)處理工作區(qū)的選擇,代碼如下:function[sheet,col]=CSheetSelected(filePath)[typ,sheet]
(3) 需要重點(diǎn)說(shuō)明的是該方法的擴(kuò)展性。通常Excel文件中保存多個(gè)工作區(qū),有時(shí)用戶可能需要打開同一Excel文件中不同工作區(qū)中的數(shù)據(jù),常規(guī)方法實(shí)現(xiàn)過(guò)于復(fù)雜,但對(duì)于本文介紹的方法可以通過(guò)修改添加幾條語(yǔ)句即可實(shí)現(xiàn)。首先,新建一個(gè)m文件用來(lái)處理工作區(qū)的選擇,代碼如下:
function [sheet,col] = CSheetSelected(filePath)
[typ, sheet] = xlsfinfo(filePath);
[row,col] = size(sheet);
由于返回值是一個(gè)cell數(shù)組,所以VC平臺(tái)要使用CStringArray數(shù)據(jù)結(jié)構(gòu)保存返回值,并顯示各工作區(qū)名稱供用戶選擇。然后,通過(guò)人機(jī)交互將用戶選擇的工作區(qū)參數(shù)保存并傳遞至CExcelRead.m,通過(guò)在 CExcelRead.m增加一個(gè)工作區(qū)選擇參數(shù),并對(duì)代碼稍作修改即可。
2 二維數(shù)組參數(shù)的傳遞與輸出[2]
下面以主成分分析為例介紹基于COM的Matlab與VC混合編程中二維數(shù)組參數(shù)處理。
(1) 主成分分析pcamat.m代碼如下:
function [eigenvector,eigenvalue] = pcamat(oriData,row,column)
//在Excel讀入時(shí)已經(jīng)完成了二維數(shù)組輸出的關(guān)鍵步驟,即輸出時(shí)將二維數(shù)組轉(zhuǎn)換為一維數(shù)組。但在VC平臺(tái)接收還原為二維時(shí)要注意,Matlab數(shù)組存儲(chǔ)方式是按列存儲(chǔ),而VC平臺(tái)下數(shù)組是按行存儲(chǔ),所以轉(zhuǎn)換時(shí)0~row-1為第一列,row~2*row-1為第二列,以此類推。本文輸入?yún)?shù)oriData是一維數(shù)組,所以要將其還原為二維數(shù)組使Matlab程序能夠正常運(yùn)行,即下一行代碼所示。
oriData = reshape(oriData,row,column);
dataSTD=std(oriData,0,1); dataMean = mean(oriData);
dataSR = (oriData-dataMean(ones(row,1),:))。/dataSTD(ones(row,1),:);
[eigenvector,newdata,eigenvalue,Exa]=princomp(dataSR);
//第三行至此處均為主成分分析內(nèi)容
eigenvector = reshape(eigenvector,column*column,1);
//與Excel文件讀取時(shí)類似,將二維輸出轉(zhuǎn)換為一維數(shù)組進(jìn)行輸出
(2) 保存后,封裝打包為COM組件,并完成注冊(cè)等相關(guān)操作。在PCA工程對(duì)話框上添加一個(gè)名為PCATest的按鈕控件,核心代碼如下:
VARIANT oriData,row,column,eigVector,eigValue;
VariantInit(&oriData); //參數(shù)初始化
oriData.vt = VT_R8|VT_ARRAY;
//定義SAFEARRAY類型的一維數(shù)組
SAFEARRAYBOUND rgsadound[1];
rgsadound[0].lLbound = 0;
rgsadound[0].cElements = m_row*m_col;
oriData.parray = SafeArrayCreate(VT_R8,1,rgsadound);
oriData.parray->pvData = m_originData;
//完成相關(guān)設(shè)置后,將第一步讀入的數(shù)據(jù)錄入到oriData中,即賦給pcamat的oriData.到此完成了二維數(shù)組的傳遞
row.vt = VT_I4; col.vt = VT_I4;
row.lVal = m_row; col.lVal = m_col;
pca->pcamat(2,&eigVector,&eigValue,oriData,row,col);
memcpy(result, eigVector.parray->pvData,m_col*m_col*
sizeof(double));
綜上,二維數(shù)組參數(shù)處理就是使用reshape()函數(shù)對(duì)輸入輸出數(shù)據(jù)維數(shù)進(jìn)行變換來(lái)完成操作。[1] [2] [3] [4] [5]
溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,本網(wǎng)站提供的以上信息僅供參考,如有異議,請(qǐng)考生以權(quán)威部門公布的內(nèi)容為準(zhǔn)!