来自 MATLAB 背景,我经常使用奇特的矩阵操作命令,例如 vec = matrix(:,1)
用于提取,例如 matrix
的第一列作为载体。
将一些代码移植到 C 并需要将其与 FORTRAN 和 MATLAB 接口(interface),现在我可以将矩阵存储在具有列优先顺序的一维数组中。
所以基本上,我正在使用宏
#define SUB2IND_2D(s1, s2, i1, i2) (s1)*(i2) + (i1)
和循环
for(size_t r=0; r<ROWS; ++r)
{
for(size_t c=0; c<COLS; ++c)
{
size_t index = SUB2IND_2D(ROWS,COLS,r,c);
// do something with matrix[index] here
}
}
为了访问相应的矩阵。现在,我的问题是:如何有效地从 matrix
中提取列或行 vector ?在 C 的这个框架内,就像我在 MATLAB 中使用 matrix(:,1) 或 matrix(1,:) 或类似的一样?
最佳答案
假设您要提取第 2 列并为其命名 ex_col:
int ex_col[];
for (size_t x=0; x<ROWS; x++)
{
size_t index = SUB2IND_2D(ROWS, COLS, x, 2); // fix column to 2 and extract all rows
ex_col[x] = matrix[index];
}
现在你可以将它概括为一个函数
关于c - 如何从 C 中的列主矩阵中提取 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22781160/