matlab的数组和C++的数组 的问题!

xueqilin_007 2009-06-08 01:05:31
C++语言的数组在内存中是按行存放的,而MATLAB得数组是按列存放的,所以问题出现了

以下代码是我在MATLAB和VS2005间混合编程中遇到的问题:

mxArray *temp;

double data[5][3]= {
{0,0,0},
{0,1,9},
{5,3,7},
{5,1,0},
{0,2,8},
};
temp=mxCreateDoubleMatrix(5,3,mxREAL);
memcpy((void*)mxGetPr(temp),(void*)data,sizeof(data));
engPutVariable(ep,"x",temp);
plot3(x(:,1),x(:,2),x(:,3),'ro-',);

此代码的问题就是,实际上在MATLAB中存入的数组是
0,9,1
0,5,0
0,3,0
0,7,2
1,5,8

对于正方维N*N的数组来说可以逆矩阵,可是这种不等的怎么办?
有没有遇到过类似问题的人,说说看有没有什么解决办法?
...全文
208 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyond071 2009-06-08
  • 打赏
  • 举报
回复
写个对矩阵的转置函数,专门处理这种问题就可以了。

template <class T>
void Transform(T *Mtx, int nRow, int nColumn)
{
const int nSize = nRow * nColumn;
T *pTemp = new T[nSize];
for (int i = 0; i < nColumn; i++)
{
int nCurPos = i * nColumn;
int nOriPos = j * nRow;
for (int j = 0; j < nRow; j++)
{
pTemp[nCurPos + j] = Mtx[nOriPos + i];
}
}
memcpy(Mtx, pTemp, sizeof(T) * nSize);
delete []pTemp;
}
ritawwl 2009-06-08
  • 打赏
  • 举报
回复
a[m][n],把行列也传过去,在matlab里面先变成一维的,再用reshape(a,[n,m]);在Matlab里面转置
beyond071 2009-06-08
  • 打赏
  • 举报
回复
MATLAB中解读内存中数据是按列的话,就没什么办法可以偷懒,你得在数据拷贝前写个函数把多维数组[M][N]转换成[N][M],即把矩阵转置。
xueqilin_007 2009-06-08
  • 打赏
  • 举报
回复
楼上说的数据转化的方法我想了一下,只不过,如果数组是动态的不等维,那么,转化就相当麻烦,所以期待更好的答案!
xueqilin_007 2009-06-08
  • 打赏
  • 举报
回复
这办法有点笨啊,有没有更方便的方法?
xueqilin_007 2009-06-08
  • 打赏
  • 举报
回复
高手在哪里?
wanggang_0717 2009-06-08
  • 打赏
  • 举报
回复
看成一维的吧,再转换
liubuweiright 2009-06-08
  • 打赏
  • 举报
回复
帮顶
能不能将数据自己处理一下,转换一下

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧