来自MATLAB背景,我经常使用奇特的矩阵操作命令(例如vec = matrix(:,1)
)来提取例如matrix
的第一列作为向量。
将一些代码移植到C,需要将它与FORTRAN和MATLAB接口,现在让我将矩阵存储在具有列主要顺序的一维数组中。
所以基本上,我正在使用宏
#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
}
}
以访问相应的矩阵。现在,我的问题是:如何在C框架内有效地从matrix
中提取列或行向量,就像我在MATLAB中使用矩阵(:,1)或矩阵(1,:)或相似?
答案 0 :(得分:2)
让我们说你要提取一个列号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];
}
现在您可以将其概括为函数
答案 1 :(得分:0)
有点不清楚你想要实现的目标。 vec(r,c)将允许您访问特定元素。否则你回答了自己的问题。 vec(:,r)将提取你的行,而vec(c,:)会在你运行循环时提取你的列。