2012年6月5日星期二

把一个C的原生二维数组转换成gsl_matrix

如果你希望所有操作在栈上进行,可以考虑这样,利用C的原生二维数组的内存布局和gsl_matrix对内存布局的假设一致:每一行的内容连续存储。


#include <stdio.h>
#include <gsl/gsl_matrix.h>

#define init_matrix(src, dst) \
    gsl_matrix dst; \
    dst.size1 = sizeof(src) / sizeof(src[0]); \
    dst.tda = dst.size2 = sizeof(src[0]) / sizeof(src[0][0]); \
    dst.data = (double*)(void*)src; \
    dst.block = NULL; dst.owner = false;
    
int main() 
{
    double x[3][4];
    for(int i=0;i<3;++i)for(int j=0;j<4;++j)x[i][j]=1+i+0.1*(1+j);
    init_matrix(x, a);
    gsl_matrix_scale(&a, 100);
    gsl_matrix_fprintf(stdout, &a, "%g");
}

结果

110
120
130
140
210
220
230
240
310
320
330
340

没有评论: