MATLAB中通過矩陣索引值求元素下標以及轉爲C語言數組下標

文章原創,轉載請註明出處

 

MATLAB中矩陣數組的下標是從1開始計數的而C語言或者C++之中則是從0開始的,而且MATLAB中矩陣的單個索引值訪問時是按列方向計數的,而C/C++中則是按行方向計數的,在考慮將MATLAB算法或者程序移植爲C/C++時必須要考慮到這兩點不同,否則會得到錯誤的結果或者造成指針訪問越界錯誤。

通過下面的程序可以將MATLAB中二維矩陣索引值轉換爲元素下標以及轉爲C語言數組下標.

function [row,col]=convertMatlabsq2Csq(index,sizeh,sizew)
%將MATLAB中二維矩陣一維線性索引值轉換爲元素二維下標以及轉爲C語言數組下標
%求取matlab中的列座標
col=floor(index/sizeh);
if col<index/sizeh %非最後一行元素的列號
    col=col+1;
end
%求取matlab中的行座標
row=index-sizeh*(col-1);%計算非第一列和非最後一行的元素行號
if col==1%第一列對應的行號
    row=index;
end
if row==0%最後一行元素的行號
    row=sizeh;
end
%下面轉爲C語言矩陣數組
row=row-1;
col=col-1;
end

測試程序:

A=[5 7 8 3 0;%二維測試矩陣
    0 3 2 4 1;
    1 4 6 2 9];
[sizea1,sizea2]=size(A);
Ai=zeros(sizea1,sizea2);%matlab中的一維線性索引值計數矩陣
B=zeros(sizea1,sizea2);
Bi=zeros(sizea1,sizea2);%C/C++中的一維線性索引值計數矩陣
%填充matlab中的一維線性索引值計數值
for i=1:sizea2
    for j=1:sizea1
        Ai(j,i)=sizea1*(i-1)+j;
    end
end
%測將一維線性索引值轉換爲元素二維下標
for L=1:sizea1*sizea2
    [xc,yc]=convertMatlabsq2Csq(Ai(L),sizea1,sizea2);%將matlab中的一維線性索引值轉化爲元素下標
    Bi(L)=xc*sizea2+yc;%填充C/C++中的一維線性索引值計數值
    B(xc+1,yc+1)=A(Ai(L));%檢查轉換後的下標對應是否正確

end

運行輸出結果如下:

>> A
A =
     5     7     8     3     0
     0     3     2     4     1
     1     4     6     2     9
>> B
B =
     5     7     8     3     0
     0     3     2     4     1
     1     4     6     2     9
>> Ai
Ai =
     1     4     7    10    13
     2     5     8    11    14
     3     6     9    12    15
>> Bi
Bi =
     0     1     2     3     4
     5     6     7     8     9
    10    11    12    13    14

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章