MEX文件中Matlab矩阵的线性索引

时间:2016-01-20 10:24:08

标签: c matlab matrix mex matrix-indexing

我有以下形式的NxN对称矩阵

F_11 F_12 F_13 ... F_1N 

F_21 ...      

F_31

.
.
.

F_N1 F_N2 F_N3 ... F_NN

每个子矩阵F_IJ的大小为m x m。

此矩阵在MatLab中创建,将用于C程序。因此,值按列存储在向量中。 (例如,向量的格式为:(F_11_11,F_11_21,F_11_31,... F_11_m1,F_21_11,... F_NN_(m-1)m,F_NN_mm)。

我的问题如下:为了便于阅读,我想在C中定义一个访问F值的方法,给定第一个子矩阵位置的索引(I,J)和索引(i,j) )子矩阵中值的位置。如何将矩阵的线性索引链接到(I,J,i,j)索引?

2 个答案:

答案 0 :(得分:2)

我假设所有索引都是零,就像在C / C ++中一样。如果要使用基于Matlab样式的索引,请从每个索引中减去一个。

我没有检查,但我猜你的索引应该是......

int idx = I*m+J*N*m*m+i+j*N*m;

答案 1 :(得分:0)

您可以编写一个计算索引的函数。请注意,在C中,索引从0开始。

size_t index_of_2d(size_t x, size_t y, size_t n) {
    return x + y*n;
}


size_t index_of_4d(size_t I, size_t J, size_t N, size_t i, size_t j, size_t m) {
    size_t submatrix = index_of_2d(I, J, N) * m * m; // scale the index in super matrix by the size of the submatrix
    return submatrix + index_of_2d(i, j, m);
}