我正在尝试将直接的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循环中超出范围。
任何人都知道这个的正确实施吗?
谢谢!
答案 0 :(得分:1)
首先,引用整个source code(以防万一)和一些documentation about it会很有帮助(所以我们知道,例如,等式11 < / em>“是”。
现在,如果我正确理解代码,可以在MATLAB中用以下内容替换所有内容(包括循环):
LMatrix = sparse([],[],[],w*h,w*h,SIZE_N2*h);
答案 1 :(得分:0)
将C ++代码最直接的转换为MATLAB
LMatrix = zeros(w*h, SIZE_N2)
请注意,代码中的第一个索引(行数)的大小为w*h
,您可以将它们交换掉。这就是你越界失误的原因,因为你索引了错误的方法。
我还要提到C ++使用基于0的索引,而MATLAB使用基于1的索引。这个将绊倒你,你必须非常非常小心,在翻译代码时总是将1添加到索引中。