MATLAB中通过矩阵索引值求元素下标以及转为C语言数组下标

本文详细介绍了将MATLAB中二维矩阵索引转换为C/C++数组下标的方法,包括求取列坐标、行坐标,并提供了一个测试程序验证转换的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章原创,转载请注明出处

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值