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

Linear indexing of Matlab matrices in MEX file

我有一个如下形式的 NxN 对称矩阵 F

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) 值在子矩阵中的位置。我怎样才能 link 矩阵到 (I,J,i,j) 索引的线性索引?

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

我没查,不过我猜你的索引应该是...

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

你可以写一个计算索引的函数。请注意,在 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);
}