将此C ++代码转换为Matlab

时间:2015-05-22 05:51:25

标签: c++ matlab matrix sparse-matrix

我正在尝试将直接的C代码转换为matlab,但是我开始陷入一些似乎很清楚的事情。这部分在做什么? SIZE_N2 = 25,w = 533,h = 800

//Init the L matrix. L is a sparse matrix that only contains SIZE_N2 non-zero elements per row.
//We store the L matrix in an array with one row per image pixel and one column per non-zero value. 
//Each array cell accumulates values according to equation 11.
LMatrix = new double* [w*h];
for(i=0; i<w*h; i++){
    LMatrix[i] = new double[SIZE_N2];
    for(j=0; j<SIZE_N2; j++){
        LMatrix[i][j] = 0;
    }
}

是不是在Matlab中创建了这个矩阵?

  

LMatrix =零(SIZE_N2,w * h);

当我使用此代码运行代码时,矩阵在for循环中超出范围。

任何人都知道这个的正确实施吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

首先,引用整个source code(以防万一)和一些documentation about it会很有帮助(所以我们知道,例如,等式11 < / em>“是”。

现在,如果我正确理解代码,可以在MATLAB中用以下内容替换所有内容(包括循环):

LMatrix = sparse([],[],[],w*h,w*h,SIZE_N2*h);

除非您事先知道非零元素应该在哪里,否则您可以在那里构建最终的稀疏矩阵,然后使用其他语法之一(docs1docs2

答案 1 :(得分:0)

将C ++代码最直接的转换为MATLAB

LMatrix = zeros(w*h, SIZE_N2)

请注意,代码中的第一个索引(行数)的大小为w*h,您可以将它们交换掉。这就是你越界失误的原因,因为你索引了错误的方法。

我还要提到C ++使用基于0的索引,而MATLAB使用基于1的索引。这个绊倒你,你必须非常非常小心,在翻译代码时总是将1添加到索引中。