如何从C中的列主矩阵中提取矢量?

时间:2014-04-01 08:58:17

标签: c matlab matrix

来自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,:)或相似?

2 个答案:

答案 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,:)会在你运行循环时提取你的列。